{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5f89bcf5",
   "metadata": {},
   "source": [
    "# 数据的读入和预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "cc4587a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "import numpy as np # 导入Numpy\n",
    "import pandas as pd # 导入Pandas\n",
    "import matplotlib.pyplot as plt # 导入matplotlib.pyplot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "03a36feb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>性别</th>\n",
       "      <th>玫瑰套餐</th>\n",
       "      <th>紫罗兰套餐</th>\n",
       "      <th>郁金香套餐</th>\n",
       "      <th>百合套餐</th>\n",
       "      <th>康乃馨套餐</th>\n",
       "      <th>胡姬花套餐</th>\n",
       "      <th>生日套餐</th>\n",
       "      <th>情人节套餐</th>\n",
       "      <th>会员卡类型</th>\n",
       "      <th>入会月数</th>\n",
       "      <th>会费支付方式</th>\n",
       "      <th>平均月消费</th>\n",
       "      <th>总消费</th>\n",
       "      <th>已停付会费</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>女</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>年卡</td>\n",
       "      <td>9</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>65.60</td>\n",
       "      <td>593.3</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>男</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>月卡</td>\n",
       "      <td>9</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>59.90</td>\n",
       "      <td>542.4</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>男</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>月卡</td>\n",
       "      <td>4</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>73.90</td>\n",
       "      <td>280.85</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>男</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>月卡</td>\n",
       "      <td>13</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>98.00</td>\n",
       "      <td>1237.85</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>女</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>月卡</td>\n",
       "      <td>9</td>\n",
       "      <td>花呗付款</td>\n",
       "      <td>69.40</td>\n",
       "      <td>571.45</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7038</th>\n",
       "      <td>7039</td>\n",
       "      <td>女</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>年卡</td>\n",
       "      <td>13</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>55.15</td>\n",
       "      <td>742.9</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7039</th>\n",
       "      <td>7040</td>\n",
       "      <td>男</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>月卡</td>\n",
       "      <td>2</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>50.30</td>\n",
       "      <td>92.75</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7040</th>\n",
       "      <td>7041</td>\n",
       "      <td>男</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>月卡</td>\n",
       "      <td>22</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>85.10</td>\n",
       "      <td>1873.7</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7041</th>\n",
       "      <td>7042</td>\n",
       "      <td>男</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>双年卡</td>\n",
       "      <td>67</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>67.85</td>\n",
       "      <td>4627.65</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7042</th>\n",
       "      <td>7043</td>\n",
       "      <td>男</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>双年卡</td>\n",
       "      <td>63</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>59.00</td>\n",
       "      <td>3707.6</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>7043 rows × 16 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码 性别 玫瑰套餐 紫罗兰套餐 郁金香套餐 百合套餐 康乃馨套餐 胡姬花套餐 生日套餐 情人节套餐 会员卡类型  入会月数 会费支付方式  \\\n",
       "0        1  女    是     是     否    是     否     是    是     否    年卡     9   手工转账   \n",
       "1        2  男    否     否     否    否     否     否    否     是    月卡     9   手工转账   \n",
       "2        3  男    否     否     否    否     是     否    否     否    月卡     4  就餐时付费   \n",
       "3        4  男    是     否     否    是     是     否    是     是    月卡    13  就餐时付费   \n",
       "4        5  女    否     是     否    否     否     是    是     是    月卡     9   花呗付款   \n",
       "...    ... ..  ...   ...   ...  ...   ...   ...  ...   ...   ...   ...    ...   \n",
       "7038  7039  女    否     否     是    否     否     是    否     否    年卡    13   手工转账   \n",
       "7039  7040  男    否     否     否    是     否     否    否     否    月卡     2   手工转账   \n",
       "7040  7041  男    是     否     否    否     否     否    否     是    月卡    22  就餐时付费   \n",
       "7041  7042  男    是     是     是    否     是     是    否     是   双年卡    67   手工转账   \n",
       "7042  7043  男    是     是     是    是     是     否    是     是   双年卡    63  就餐时付费   \n",
       "\n",
       "      平均月消费      总消费 已停付会费  \n",
       "0     65.60    593.3     否  \n",
       "1     59.90    542.4     否  \n",
       "2     73.90   280.85     是  \n",
       "3     98.00  1237.85     是  \n",
       "4     69.40   571.45     否  \n",
       "...     ...      ...   ...  \n",
       "7038  55.15    742.9     否  \n",
       "7039  50.30    92.75     否  \n",
       "7040  85.10   1873.7     是  \n",
       "7041  67.85  4627.65     否  \n",
       "7042  59.00   3707.6     否  \n",
       "\n",
       "[7043 rows x 16 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_member = pd.read_csv('易速鲜花会员留存.csv') # 导入数据包\n",
    "df_member"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e45d1ec1",
   "metadata": {},
   "source": [
    "# 数据清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8502efcc",
   "metadata": {},
   "outputs": [],
   "source": [
    "#把总消费字段转换成数值字段\n",
    "df_member['总消费'] = pd.to_numeric(df_member['总消费'], errors='coerce')\n",
    "df_member['总消费'].fillna(0, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "269307a3",
   "metadata": {},
   "source": [
    "# 数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "df4a1dfc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,8))\n",
    "plt.subplot(2, 2, 1)\n",
    "ax = df_member.groupby('性别').count()['用户码'].plot.pie(autopct='%1.0f%%') #饼图\n",
    "plt.subplot(2, 2, 2)\n",
    "ax = df_member.groupby('会费支付方式').count()['用户码'].plot.pie(autopct='%1.0f%%') #饼图\n",
    "plt.subplot(2, 2, 3)\n",
    "ax = df_member.groupby('会员卡类型').count()['用户码'].plot.pie(autopct='%1.0f%%') #饼图\n",
    "plt.subplot(2, 2, 4)\n",
    "ax = df_member.groupby('已停付会费').count()['用户码'].plot.pie(autopct='%1.0f%%') #饼图\n",
    "plt.show() #显示"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "971845bb",
   "metadata": {},
   "source": [
    "# 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c0574c2e",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_member['已停付会费'].replace(to_replace='是', value=1, inplace=True) #流失-1\n",
    "df_member['已停付会费'].replace(to_replace='否',  value=0, inplace=True) #未流失-0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d8676f39",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_member['性别'].replace(to_replace='女', value=0, inplace=True) #女生-0\n",
    "df_member['性别'].replace(to_replace='男', value=1, inplace=True) #男生-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "2f074a5a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 字段中'Yes' or 'No'转换成为模型可以读取的数值,（布尔型数据，也是数值数据）\n",
    "binary_features = ['玫瑰套餐', '紫罗兰套餐', '郁金香套餐', '百合套餐', '康乃馨套餐', '胡姬花套餐', \n",
    "                   '生日套餐','情人节套餐']\n",
    "for field in binary_features:\n",
    "    df_member[field] = df_member[field] == '是'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "25221310",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>性别</th>\n",
       "      <th>玫瑰套餐</th>\n",
       "      <th>紫罗兰套餐</th>\n",
       "      <th>郁金香套餐</th>\n",
       "      <th>百合套餐</th>\n",
       "      <th>康乃馨套餐</th>\n",
       "      <th>胡姬花套餐</th>\n",
       "      <th>生日套餐</th>\n",
       "      <th>情人节套餐</th>\n",
       "      <th>会员卡类型</th>\n",
       "      <th>入会月数</th>\n",
       "      <th>会费支付方式</th>\n",
       "      <th>平均月消费</th>\n",
       "      <th>总消费</th>\n",
       "      <th>已停付会费</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>年卡</td>\n",
       "      <td>9</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>65.60</td>\n",
       "      <td>593.30</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>月卡</td>\n",
       "      <td>9</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>59.90</td>\n",
       "      <td>542.40</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>月卡</td>\n",
       "      <td>4</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>73.90</td>\n",
       "      <td>280.85</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>月卡</td>\n",
       "      <td>13</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>98.00</td>\n",
       "      <td>1237.85</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>月卡</td>\n",
       "      <td>9</td>\n",
       "      <td>花呗付款</td>\n",
       "      <td>69.40</td>\n",
       "      <td>571.45</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7038</th>\n",
       "      <td>7039</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>年卡</td>\n",
       "      <td>13</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>55.15</td>\n",
       "      <td>742.90</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7039</th>\n",
       "      <td>7040</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>月卡</td>\n",
       "      <td>2</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>50.30</td>\n",
       "      <td>92.75</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7040</th>\n",
       "      <td>7041</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>月卡</td>\n",
       "      <td>22</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>85.10</td>\n",
       "      <td>1873.70</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7041</th>\n",
       "      <td>7042</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>双年卡</td>\n",
       "      <td>67</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>67.85</td>\n",
       "      <td>4627.65</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7042</th>\n",
       "      <td>7043</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>双年卡</td>\n",
       "      <td>63</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>59.00</td>\n",
       "      <td>3707.60</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>7043 rows × 16 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码  性别   玫瑰套餐  紫罗兰套餐  郁金香套餐   百合套餐  康乃馨套餐  胡姬花套餐   生日套餐  情人节套餐 会员卡类型  \\\n",
       "0        1   0   True   True  False   True  False   True   True  False    年卡   \n",
       "1        2   1  False  False  False  False  False  False  False   True    月卡   \n",
       "2        3   1  False  False  False  False   True  False  False  False    月卡   \n",
       "3        4   1   True  False  False   True   True  False   True   True    月卡   \n",
       "4        5   0  False   True  False  False  False   True   True   True    月卡   \n",
       "...    ...  ..    ...    ...    ...    ...    ...    ...    ...    ...   ...   \n",
       "7038  7039   0  False  False   True  False  False   True  False  False    年卡   \n",
       "7039  7040   1  False  False  False   True  False  False  False  False    月卡   \n",
       "7040  7041   1   True  False  False  False  False  False  False   True    月卡   \n",
       "7041  7042   1   True   True   True  False   True   True  False   True   双年卡   \n",
       "7042  7043   1   True   True   True   True   True  False   True   True   双年卡   \n",
       "\n",
       "      入会月数 会费支付方式  平均月消费      总消费  已停付会费  \n",
       "0        9   手工转账  65.60   593.30      0  \n",
       "1        9   手工转账  59.90   542.40      0  \n",
       "2        4  就餐时付费  73.90   280.85      1  \n",
       "3       13  就餐时付费  98.00  1237.85      1  \n",
       "4        9   花呗付款  69.40   571.45      0  \n",
       "...    ...    ...    ...      ...    ...  \n",
       "7038    13   手工转账  55.15   742.90      0  \n",
       "7039     2   手工转账  50.30    92.75      0  \n",
       "7040    22  就餐时付费  85.10  1873.70      1  \n",
       "7041    67   手工转账  67.85  4627.65      0  \n",
       "7042    63  就餐时付费  59.00  3707.60      0  \n",
       "\n",
       "[7043 rows x 16 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_member"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18233d5d",
   "metadata": {},
   "source": [
    "# 数据整理\n",
    "\n",
    "先做数据整理工作，把每个数据字段都转换为可以处理的字段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "708d92c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>性别</th>\n",
       "      <th>玫瑰套餐</th>\n",
       "      <th>紫罗兰套餐</th>\n",
       "      <th>郁金香套餐</th>\n",
       "      <th>百合套餐</th>\n",
       "      <th>康乃馨套餐</th>\n",
       "      <th>胡姬花套餐</th>\n",
       "      <th>生日套餐</th>\n",
       "      <th>情人节套餐</th>\n",
       "      <th>入会月数</th>\n",
       "      <th>平均月消费</th>\n",
       "      <th>总消费</th>\n",
       "      <th>已停付会费</th>\n",
       "      <th>会员卡类型_年卡</th>\n",
       "      <th>会员卡类型_月卡</th>\n",
       "      <th>会费支付方式_微信自动扣款</th>\n",
       "      <th>会费支付方式_手工转账</th>\n",
       "      <th>会费支付方式_花呗付款</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>9</td>\n",
       "      <td>65.60</td>\n",
       "      <td>593.30</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>9</td>\n",
       "      <td>59.90</td>\n",
       "      <td>542.40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>4</td>\n",
       "      <td>73.90</td>\n",
       "      <td>280.85</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>13</td>\n",
       "      <td>98.00</td>\n",
       "      <td>1237.85</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>9</td>\n",
       "      <td>69.40</td>\n",
       "      <td>571.45</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7038</th>\n",
       "      <td>7039</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>13</td>\n",
       "      <td>55.15</td>\n",
       "      <td>742.90</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7039</th>\n",
       "      <td>7040</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>2</td>\n",
       "      <td>50.30</td>\n",
       "      <td>92.75</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7040</th>\n",
       "      <td>7041</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>22</td>\n",
       "      <td>85.10</td>\n",
       "      <td>1873.70</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7041</th>\n",
       "      <td>7042</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>67</td>\n",
       "      <td>67.85</td>\n",
       "      <td>4627.65</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7042</th>\n",
       "      <td>7043</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>63</td>\n",
       "      <td>59.00</td>\n",
       "      <td>3707.60</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>7043 rows × 19 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码  性别   玫瑰套餐  紫罗兰套餐  郁金香套餐   百合套餐  康乃馨套餐  胡姬花套餐   生日套餐  情人节套餐  入会月数  \\\n",
       "0        1   0   True   True  False   True  False   True   True  False     9   \n",
       "1        2   1  False  False  False  False  False  False  False   True     9   \n",
       "2        3   1  False  False  False  False   True  False  False  False     4   \n",
       "3        4   1   True  False  False   True   True  False   True   True    13   \n",
       "4        5   0  False   True  False  False  False   True   True   True     9   \n",
       "...    ...  ..    ...    ...    ...    ...    ...    ...    ...    ...   ...   \n",
       "7038  7039   0  False  False   True  False  False   True  False  False    13   \n",
       "7039  7040   1  False  False  False   True  False  False  False  False     2   \n",
       "7040  7041   1   True  False  False  False  False  False  False   True    22   \n",
       "7041  7042   1   True   True   True  False   True   True  False   True    67   \n",
       "7042  7043   1   True   True   True   True   True  False   True   True    63   \n",
       "\n",
       "      平均月消费      总消费  已停付会费  会员卡类型_年卡  会员卡类型_月卡  会费支付方式_微信自动扣款  会费支付方式_手工转账  \\\n",
       "0     65.60   593.30      0         1         0              0            1   \n",
       "1     59.90   542.40      0         0         1              0            1   \n",
       "2     73.90   280.85      1         0         1              0            0   \n",
       "3     98.00  1237.85      1         0         1              0            0   \n",
       "4     69.40   571.45      0         0         1              0            0   \n",
       "...     ...      ...    ...       ...       ...            ...          ...   \n",
       "7038  55.15   742.90      0         1         0              0            1   \n",
       "7039  50.30    92.75      0         0         1              0            1   \n",
       "7040  85.10  1873.70      1         0         1              0            0   \n",
       "7041  67.85  4627.65      0         0         0              0            1   \n",
       "7042  59.00  3707.60      0         0         0              0            0   \n",
       "\n",
       "      会费支付方式_花呗付款  \n",
       "0               0  \n",
       "1               0  \n",
       "2               0  \n",
       "3               0  \n",
       "4               1  \n",
       "...           ...  \n",
       "7038            0  \n",
       "7039            0  \n",
       "7040            0  \n",
       "7041            0  \n",
       "7042            0  \n",
       "\n",
       "[7043 rows x 19 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 分类字段哑变量\n",
    "category_features = ['会员卡类型', '会费支付方式']\n",
    "df_member = pd.get_dummies(df_member, drop_first=True, columns=category_features)\n",
    "df_member"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d2af03d",
   "metadata": {},
   "source": [
    "# 构建特征集和标签集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "cac73c18",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df_member.drop(['用户码','已停付会费'], axis = 1) # 构建特征集，用户码字段属于无用特征\n",
    "y = df_member.已停付会费.values # 构建标签集"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b86423d",
   "metadata": {},
   "source": [
    "# 拆分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "c99644f4",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split #导入train_test_split模块\n",
    "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2) #拆分数据集"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dec136d0",
   "metadata": {},
   "source": [
    "# 选择算法\n",
    "这里我们比较逻辑回归和神经网络两种算法"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "627138f7",
   "metadata": {},
   "source": [
    "## 逻辑回归模型\n",
    "### 导入模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "94c5813c",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression #导入逻辑回归模型\n",
    "lr = LogisticRegression() # lr,就代表是逻辑回归模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "37c229f9",
   "metadata": {},
   "source": [
    "### 训练机器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "2b54fa41",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr.fit(X_train,y_train) # fit,就相当于是梯度下降"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b38a2bb7",
   "metadata": {},
   "source": [
    "### 评估分数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "912f5bb2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SK-learn逻辑回归预测准确率79.84%\n"
     ]
    }
   ],
   "source": [
    "print(\"SK-learn逻辑回归预测准确率{:.2f}%\".format(lr.score(X_test,y_test)*100))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b9f5047",
   "metadata": {},
   "source": [
    "### 预测结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "7e5e0ca9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "逻辑回归对测试集第一个用户的预测结果 1\n"
     ]
    }
   ],
   "source": [
    "y_pred=lr.predict(X_test)\n",
    "print(\"逻辑回归对测试集第一个用户的预测结果\", y_pred[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8c853be",
   "metadata": {},
   "source": [
    "## 神经网络模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "39d01220",
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install keras\n",
    "#!pip install tensorflow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "c9698cba",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2022-09-24 11:19:05.428229: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA\n",
      "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " dense (Dense)               (None, 12)                216       \n",
      "                                                                 \n",
      " dense_1 (Dense)             (None, 24)                312       \n",
      "                                                                 \n",
      " dense_2 (Dense)             (None, 1)                 25        \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 553\n",
      "Trainable params: 553\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2022-09-24 11:19:09.943548: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA\n",
      "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
     ]
    }
   ],
   "source": [
    "import keras # 导入Keras库\n",
    "from keras.models import Sequential # 导入Keras序贯模型\n",
    "from keras.layers import Dense # 导入Keras密集连接层\n",
    "dnn = Sequential() # 创建一个序贯DNN模型\n",
    "dnn.add(Dense(units=12, input_dim=17, activation = 'relu')) # 添加输入层\n",
    "dnn.add(Dense(units=24, activation = 'relu')) # 添加隐层\n",
    "dnn.add(Dense(units=1, activation = 'sigmoid')) # 添加输出层\n",
    "dnn.summary() # 显示网络模型（这个语句不是必须的）\n",
    "# 编译神经网络，指定优化器，损失函数，以及评估标准\n",
    "dnn.compile(optimizer = 'RMSProp', #优化器\n",
    "            loss = 'binary_crossentropy', #损失函数\n",
    "            metrics = ['acc']) #评估标准"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "001175e1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5634, 17)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape #X_train目前的形状"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "bfc79256",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = np.asarray(X_train).astype(np.float32) # 转换为NumPy张量\n",
    "X_test = np.asarray(X_test).astype(np.float32) # 转换为NumPy张量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "ece56ca9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float32')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.dtype #X_train转换后的类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "db2b7d2d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/30\n",
      "71/71 [==============================] - 2s 10ms/step - loss: 2.0908 - acc: 0.6982 - val_loss: 2.5776 - val_acc: 0.7498\n",
      "Epoch 2/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.2871 - acc: 0.7069 - val_loss: 2.4987 - val_acc: 0.7489\n",
      "Epoch 3/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.3035 - acc: 0.7038 - val_loss: 0.5805 - val_acc: 0.7382\n",
      "Epoch 4/30\n",
      "71/71 [==============================] - 0s 5ms/step - loss: 1.3638 - acc: 0.7042 - val_loss: 0.5683 - val_acc: 0.7418\n",
      "Epoch 5/30\n",
      "71/71 [==============================] - 0s 5ms/step - loss: 1.2668 - acc: 0.7138 - val_loss: 0.7358 - val_acc: 0.7542\n",
      "Epoch 6/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.2479 - acc: 0.7173 - val_loss: 0.6301 - val_acc: 0.7560\n",
      "Epoch 7/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.2334 - acc: 0.7136 - val_loss: 0.6643 - val_acc: 0.7524\n",
      "Epoch 8/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.2405 - acc: 0.7249 - val_loss: 1.2451 - val_acc: 0.7524\n",
      "Epoch 9/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.1627 - acc: 0.7313 - val_loss: 2.0085 - val_acc: 0.7542\n",
      "Epoch 10/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.1452 - acc: 0.7249 - val_loss: 1.2050 - val_acc: 0.7533\n",
      "Epoch 11/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.2030 - acc: 0.7269 - val_loss: 0.6764 - val_acc: 0.7542\n",
      "Epoch 12/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.1408 - acc: 0.7262 - val_loss: 1.0430 - val_acc: 0.7587\n",
      "Epoch 13/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.1202 - acc: 0.7249 - val_loss: 0.6640 - val_acc: 0.7578\n",
      "Epoch 14/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.0449 - acc: 0.7313 - val_loss: 1.2812 - val_acc: 0.7595\n",
      "Epoch 15/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.0658 - acc: 0.7302 - val_loss: 0.7120 - val_acc: 0.7569\n",
      "Epoch 16/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.0885 - acc: 0.7262 - val_loss: 0.5352 - val_acc: 0.7267\n",
      "Epoch 17/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.9822 - acc: 0.7426 - val_loss: 0.9159 - val_acc: 0.7578\n",
      "Epoch 18/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.0361 - acc: 0.7389 - val_loss: 0.9897 - val_acc: 0.7622\n",
      "Epoch 19/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.0050 - acc: 0.7406 - val_loss: 0.8847 - val_acc: 0.5191\n",
      "Epoch 20/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.9103 - acc: 0.7502 - val_loss: 0.8228 - val_acc: 0.7622\n",
      "Epoch 21/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.9754 - acc: 0.7413 - val_loss: 0.9742 - val_acc: 0.7631\n",
      "Epoch 22/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.9477 - acc: 0.7444 - val_loss: 0.5065 - val_acc: 0.7702\n",
      "Epoch 23/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.9163 - acc: 0.7502 - val_loss: 1.3911 - val_acc: 0.7613\n",
      "Epoch 24/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 1.0027 - acc: 0.7395 - val_loss: 0.5466 - val_acc: 0.7595\n",
      "Epoch 25/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.9579 - acc: 0.7357 - val_loss: 0.6323 - val_acc: 0.7675\n",
      "Epoch 26/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.8934 - acc: 0.7455 - val_loss: 1.4082 - val_acc: 0.7613\n",
      "Epoch 27/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.8993 - acc: 0.7479 - val_loss: 0.4894 - val_acc: 0.7693\n",
      "Epoch 28/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.8408 - acc: 0.7542 - val_loss: 0.4865 - val_acc: 0.7622\n",
      "Epoch 29/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.8808 - acc: 0.7364 - val_loss: 1.8567 - val_acc: 0.7604\n",
      "Epoch 30/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.8539 - acc: 0.7517 - val_loss: 1.2520 - val_acc: 0.7613\n"
     ]
    }
   ],
   "source": [
    "history = dnn.fit(X_train, y_train, # 指定训练集\n",
    "                  epochs=30,        # 指定训练的轮次\n",
    "                  batch_size=64,    # 指定数据批量\n",
    "                  validation_split=0.2) #这里直接从训练集数据中拆分验证集，更方便"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "f59f169b",
   "metadata": {},
   "outputs": [],
   "source": [
    "def show_history(history): # 显示训练过程中的学习曲线\n",
    "    loss = history.history['loss']\n",
    "    val_loss = history.history['val_loss']\n",
    "    epochs = range(1, len(loss) + 1)\n",
    "    plt.figure(figsize=(12,4))\n",
    "    plt.subplot(1, 2, 1)\n",
    "    plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "    plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "    plt.title('Training and validation loss')\n",
    "    plt.xlabel('Epochs')\n",
    "    plt.ylabel('Loss')\n",
    "    plt.legend()\n",
    "    acc = history.history['acc']\n",
    "    val_acc = history.history['val_acc']\n",
    "    plt.subplot(1, 2, 2)\n",
    "    plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "    plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "    plt.title('Training and validation accuracy')\n",
    "    plt.xlabel('Epochs')\n",
    "    plt.ylabel('Accuracy')\n",
    "    plt.legend()\n",
    "    plt.show() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "d0f95a58",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtAAAAEWCAYAAABPDqCoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABv9UlEQVR4nO2deXxU5fX/34ewhCUBAREkQMCNRSBBBARFVKwoblisIFVRvyoutWrr8q1WqZbvr622Wqu2xV1Ki7Yq1RY3UNwXIrKDioCAIkIQCMjO+f3xzCWTYWZyZ8ts5/16zevO3LnLmZvkyWfO/TzniKpiGIZhGIZhGIY/6qU7AMMwDMMwDMPIJkxAG4ZhGIZhGEYMmIA2DMMwDMMwjBgwAW0YhmEYhmEYMWAC2jAMwzAMwzBiwAS0YRiGYRiGYcSACWhjP0TkJRG5KNnbphMRWSEiQ1NwXBWRQwPP/yIiv/SzbRznGSMir8YbZ5TjDhGR1ck+rmEYsWHjbkzHzepx18gN6qc7ACM5iMiWoJdNgB3AnsDrK1R1st9jqeqpqdg211HVcck4joiUAsuBBqq6O3DsyYDvn6FhGKnHxt30Y+OukS5MQOcIqtrMey4iK4D/UdXpoduJSH1vcDAMwzDix8ZdIxux38fkYBaOHMe7RS8iN4vIN8DjInKAiPxHRNaJyHeB5yVB+8wUkf8JPB8rIu+IyD2BbZeLyKlxbttZRN4SkSoRmS4iD4rI3yLE7SfGu0Tk3cDxXhWR1kHvXyAiX4pIpYjcGuX6DBCRb0SkIGjdCBGZF3jeT0TeF5GNIrJGRB4QkYYRjvWEiPw66PWNgX2+FpFLQrYdLiKfiMhmEVklIuOD3n4rsNwoIltE5Bjv2gbtP1BEZonIpsByoN9rEw0R6RbYf6OILBSRM4PeO01EFgWO+ZWI/DywvnXg57NRRDaIyNsiYmOLkbfYuGvjbrRx18d1bikijwc+w3ciMjXovbNEZE7gM3whIsMC62vYZURkvPdzFpFScVaWS0VkJfB6YP0/Az+HTYHfkR5B+zcWkd8Hfp6bAr9jjUXkvyLyk5DPM09Ezg73WXMZ+yeXH7QFWgKdgMtxP/fHA687AtuAB6Ls3x/4FGgN/A54VEQkjm3/DnwEtALGAxdEOaefGM8HLgbaAA0BT9B1B/4cOP7BgfOVEAZV/QDYCpwYcty/B57vAa4PfJ5jgJOAq6LETSCGYYF4TgYOA0J9gFuBC4EWwHDgyqABaHBg2UJVm6nq+yHHbgn8F7g/8Nn+APxXRFqFfIb9rk0tMTcAXgReDez3E2CyiBwR2ORR3G3pIuBIAoMw8DNgNXAgcBDwC0BrO59h5Dg27tq4G2ncre06T8JZgnoEjnVvIIZ+wFPAjYHPMBhYEeEc4Tge6AacEnj9Eu46tQFmU9Oucg9wFDAQ93t8E7AXeBL4sbeRiPQG2gPTYogjN1BVe+TYA/cHNTTwfAiwEyiMsn0Z8F3Q65m4W5EAY4GlQe81wYmjtrFsixskdgNNgt7/G/A3n58pXIy3Bb2+Cng58Px2YErQe00D12BohGP/Gngs8LwIN8h2irDtdcDzQa8VODTw/Ang14HnjwG/Cdru8OBtwxz3PuDewPPSwLb1g94fC7wTeH4B8FHI/u8DY2u7NmHOOwRYHXh+HPANUC/o/X8A4wPPVwJXAMUhx7gT+Hekz2YPe+TDAxt3bdz1Oe5Gu85AO5xQPSDMdn/14o32+xd4Pd77OQd9ti5RYmgR2KY5TuBvA3qH2a4RsAE4LPD6HuChVPxNZfrDMtD5wTpV3e69EJEmIvLXwK2ZzbhbVy2Cb6eF8I33RFW/DzxtFuO2BwMbgtYBrIoUsM8Yvwl6/n1QTAcHH1tVtwKVkc6Fy3qcIyKNgHOA2ar6ZSCOwwO3174JxPF/uKxIbdSIAfgy5PP1F5E3ArfwNgHjfB7XO/aXIeu+xGUBPCJdm1pjVtW9EY77Q+A04EsReVNEjgmsvxtYCrwqIstE5BZ/H8Mwchobd23cDfvzquU6d8D9zL4Ls2sH4Auf8YZj37URkQIR+U3ABrKZ6kx268CjMNy5VHUH8AzwY3FWvdG4jHneYQI6Pwi9nf4z4Aigv6oWU33rKtLtwWSwBmgpIk2C1nWIsn0iMa4JPnbgnK0ibayqi3AD4anUvI0I7pbkEty37WKcPSHmGHCZoGD+DrwAdFDV5sBfgo5bm/3ha9ytv2A6Al/5iKu243aQmv7lfcdV1Vmqehbudt9U3CCKqlap6s9UtQtwBnCDiJyUYCyGke3YuGvjbiSiXedVuJ9ZizD7rQIOiXDMrbi7Dx5tw2wT/BnPB87C2Vya47LUXgzrge1RzvUkMAZnrfleQ+wu+YIJ6PykCHd7ZmPA13VHqk8YyCxUAONFpGEge3lGimL8F3C6iBwrbuLJndT+u/534FrcQPbPkDg2A1tEpCtwpc8YngHGikj3wD+S0PiLcFmG7QFf2/lB763D3cLrEuHY04DDReR8EakvIucB3YH/+IwtEh/iBuGbRKSBiAzB/YymBH5mY0Skuaruwl2TPQAicrqIHBrwXHrr94Q9g2HkLzbu7k++jrsRr7OqrsF5kx8SN9mwgYh4AvtR4GIROUlE6olI+8D1AZgDjAps3xcY6SOGHbi7BE1wWX4vhr04O8wfROTgQLb6mMDdAgKCeS/we/I0+wwmoPOV+4DGuG+ZHwAv19F5x+AmhFTi/G9P4/6Aw3EfccaoqguBq3GD8xrgO9wkt2j8A+dbfF1V1wet/zlukK0CHg7E7CeGlwKf4XWcveH1kE2uAu4UkSqcd/CZoH2/ByYA74qbhT4g5NiVwOm4LEYlbnLH6SFxx4yq7gTOxGWE1gMPAReq6pLAJhcAKwK3+8ZRPZHkMGA6sAXnCXxIVWcmEoth5CD3YeNuKPk67t5H9Ot8AbALl4X/FucBR1U/wk1SvBfYBLxJdVb8l7iM8XfAr6iZ0Q/HU7g7AF8BiwJxBPNzYD4wC+d5/i01NeNTQE+cpz4vkYAJ3DDqHBF5GliiqinPxBiGYRg27hrJQUQuBC5X1WPTHUu6sAy0UWeIyNEickjg1tMwnP9qaprDMgzDyFls3DWSTcAecxUwMd2xpBPrRGjUJW2B53ATS1YDV6rqJ+kNyTAMI6excddIGiJyCu73aTq120RyGrNwGIZhGIZhGEYMmIXDMAzDMAzDMGIg6ywcrVu31tLS0nSHYRiGERcff/zxelU9MN1x1BU2ZhuGkc1EGrOzTkCXlpZSUVGR7jAMwzDiQkRCu5nlNDZmG4aRzUQas83CYRiGYRiGYRgxYALaMAzDMAzDMGLABLRhGIZhGIZhxEDWeaANI1/ZtWsXq1evZvv27ekOxfBBYWEhJSUlNGjQIN2hGIZhGEnGBLRhZAmrV6+mqKiI0tJSRCTd4RhRUFUqKytZvXo1nTt3Tnc4hmEYRpIxC4dhZAnbt2+nVatWJp6zABGhVatWdrfAMAwjRzEBbRhZhInn7MF+VoZhGLlLXgjof/4T/vGPdEdhGIZhGIaRGJs3wwMPwJd5VVE+88h5Aa0Kjz0G558P110Hu3alOyLDyE4qKyspKyujrKyMtm3b0r59+32vd+7cGXXfiooKrr322lrPMXDgwKTEOnPmTE4//fSkHMswDCMT2LsXnngCDj8cfvIT6N0bnn023VHFxt698Ne/wimnwBtvpDuaxMh5AS0CL7zgxPMf/wgnnABr1qQ7KsNIPZMnQ2kp1KvnlpMnJ3a8Vq1aMWfOHObMmcO4ceO4/vrr971u2LAhu3fvjrhv3759uf/++2s9x3vvvZdYkIZhGDnIRx/BMcfAxRdDly7w7387IT1yJIwbB9u2pfb8q1fDyy9DlGG+VpYtg6FDXbzvvgsnngg/+hGsXJm8OOuSnBfQAA0awL33OhvHJ59Anz7w9tvpjsowUsfkyXD55e4Wn6pbXn554iI6lLFjx3LDDTdwwgkncPPNN/PRRx8xcOBAysvLGThwIJ9++ilQMyM8fvx4LrnkEoYMGUKXLl1qCOtmzZrt237IkCGMHDmSrl27MmbMGFQVgGnTptG1a1eOPfZYrr322lozzRs2bODss8+mV69eDBgwgHnz5gHw5ptv7sugl5eXU1VVxZo1axg8eDBlZWUceeSRvG0DhWEYaeSbb5xo7t/fCc2nnoJ33oEzz3TLG290Gd1+/WDhwuSff+9e+MtfoFs3OPVUt/zb32DPntiOcf/90LMnfPwxPPwwfPst3Hkn/Oc/0LWre57qLwFJR1Wz6nHUUUdpIsyfr3rYYaoFBar33qu6d29ChzOMOmPRokW+t+3USdVJ55qPTp2SE8sdd9yhd999t1500UU6fPhw3b17t6qqbtq0SXft2qWqqq+99pqec845qqr6xhtv6PDhw/fte8wxx+j27dt13bp12rJlS925c6eqqjZt2nTf9sXFxbpq1Srds2ePDhgwQN9++23dtm2blpSU6LJly1RVddSoUfuOG0zw+a655hodP368qqrOmDFDe/furaqqp59+ur7zzjuqqlpVVaW7du3Se+65R3/961+rquru3bt18+bNCV2ncD8zoEIzYCytq0eiY7Zh5CM7dqjec49qUZFqgwaqN92kGmk4evll1TZtVBs3Vp04MXm65osvVE84wf3vOOkk1UmTVHv3dq+7dVN95hnVPXuiH+Ozz1SPPdbtc+qpqitX1nz/yy9Vf/Sj6v9P//pX5umySGN2yjLQItJBRN4QkcUislBEfhpmmyEisklE5gQet6cqHo8jj4RZs+CMM+D662H0aNiyJdVnNYy6JdItsVTcKjv33HMpKCgAYNOmTZx77rkceeSRXH/99SyMkBIZPnw4jRo1onXr1rRp04a1a9fut02/fv0oKSmhXr16lJWVsWLFCpYsWUKXLl321VYePXp0rfG98847XHDBBQCceOKJVFZWsmnTJgYNGsQNN9zA/fffz8aNG6lfvz5HH300jz/+OOPHj2f+/PkUFRXFe1kMwzDi4pVXoFcv+PnP4bjjYMEC+O1vIdJwdMopMHcuDBrk7jSedx5s3Bj/+YMzxhUVMHEivPYa/PjHMHu2K8wAzn7Rp4+zkwRuEO5jzx74/e/d51iwwHm3//tf6NCh5nYdO8LTTzs/dHGxs6QMHZqabHqySaWFYzfwM1XtBgwArhaR7mG2e1tVywKPO1MYzz6aN3fG+//3/9wvQv/+ELjTbBg5QceOsa1PhKZNm+57/stf/pITTjiBBQsW8OKLL0asg9yoUaN9zwsKCsL6p8Nto6GjtA/C7SMi3HLLLTzyyCNs27aNAQMGsGTJEgYPHsxbb71F+/btueCCC3jqqadiPp9hGLnB7t2wYkXyjrdggbMsPPWUs5XedhtcdZUTvEOHOjHasSMMG+YE6H/+40Tn4YfXfuy2bZ3w/s1v4PnnobwcPvgg9hg//xyOPx5++lO3XLgQLrvMzScDN6dm5EiYP99ZObZuhbPPdhaSl192QnrRIifmf/5zJ+4XLYKLLqo+RjiGDHHi/IEHnNW2d28Xw+efJ+a7TiUp60SoqmuANYHnVSKyGGgPLErVOWOhXj245Rbo29dloY8+Gp58EkaMSHdkhpE4Eya4TMT331eva9LErU8lmzZton379gA88cQTST9+165dWbZsGStWrKC0tJSnn3661n0GDx7M5MmT+eUvf8nMmTNp3bo1xcXFfPHFF/Ts2ZOePXvy/vvvs2TJEho3bkz79u257LLL2Lp1K7Nnz+bCCy9M+ucwDCNzmTvXidzJk2HtWicAu3VL7JiffuoyusHUqwctW7pHq1bQvr3L2PbpA1dcAUE5BF/Uqwc33+yE7+jRcOyxToT26+dE+GGHQWCayX7s2QP33edEfWGhyxhfeGFk0VtQAGPGOPE/aZLzMJ96qhPuCxe6bPnf/w6jRkUXzsHUrw9XX+2OefvtTkzff79b36WLi9/7HN6ypMR9bnDivaoKKithwwa3DH7esSOMHRvbNY0ab/IOFRkRKQXKgQ/DvH2MiMwFvgZ+rqp1mrgfOtSZ2keOhHPOcd/Y+vevywgMI/mMGeOWt97qbBsdOzrx7K1PFTfddBMXXXQRf/jDHzjxxBOTfvzGjRvz0EMPMWzYMFq3bk2/fv1q3Wf8+PFcfPHF9OrViyZNmvDkk08CcN999/HGG29QUFBA9+7dOfXUU5kyZQp33303DRo0oFmzZpaBNow6YMcOJ3xat05fDF9/7QTfU0+57GqDBk4Mrl3rKlAkKqC96l9//rPTHa1aubvh9VLgAxgwwGVxr7oK/vCHmu+1a1ctQD0R2qKFSyh++CGcdZaLsV07f+eqX99NchwzBh5/3FU7GzHCLQ86KL74W7eGhx6Ca6+F9993WejPPnPL11+vOdmwsNCJ6KoqJ5SjlSo+/fTkCmiJ55ZoTCcQaQa8CUxQ1edC3isG9qrqFhE5Dfijqh4W5hiXA5cDdOzY8agvU1A9fOlS94v05JPuW5dhZBqLFy+mW6KjeA6wZcsWmjVrhqpy9dVXc9hhh3H99denO6ywhPuZicjHqto3TSHVOX379tWKiop0h2EkEVU3l+iTT5z4atWq+tGyJTRtun/WcfduVw3IE0KffVb93KsW1KGDK9U2YIB7lJc7gZQqtm6FqVOdaJ4+3Xl/+/d3GuC885xwLitzls9zzknsXC++6CpnfPSRu+NdV3z/PXzxRc3r7S2//bZ6u1at4E9/ii1jnA727nVfdrzP8Pnn7udUXLz/72Hw6wMOcF+K4iHSmJ3SDLSINACeBSaHimcAVd0c9HyaiDwkIq1VdX3IdhOBieAG41TEWlzslps3R9/OMIz08vDDD/Pkk0+yc+dOysvLueKKK9IdkmHkBV9+6XyvTz3lBEwkGjasKVy+/dbVAA7ODhYXuwzoMcc4f2xRkZuw9sEH8MwzbhsvCxwsqjt1So7A++1v4de/dkUEOnWCX/wCLrigpt940ya3TEahAe8YdT0vuUkTZx0JtY+A+3zeF5jBg+HAA+s2tnioV89lnEtKXB3pdJIyAS0iAjwKLFbVP0TYpi2wVlVVRPrhJjVWpiqmaHgCuqoqHWc3DMMv119/fcZmnI38Zs8eZ5lautRlZo86KjW36OuSzZvhX/9yovnNN92644+Hm25yVoQtW/b3nAa/3rDBVb8aMaKmf/XAAyML4TVrnJ3ggw/c4+GHnSUA4Fe/cv7YRPj2W+f1HTIEfvlL5xUO93Py/MLJ0AXeMTKpsE/z5m4eWN8MvB82eXLdWxBjJZUZ6EHABcB8EZkTWPcLoCOAqv4FGAlcKSK7gW3AKE21pyQCjRo5L48JaMMwDCMSqk7gBd8K95ZLl0JwV/s2bdzEquHD4Qc/cIIlG9i925Ute+opZ3HYvt2J3rvucqXMSktTe/527Vxlh7PPro5n/nzn0733Xtc8pHHj+I//1FPumH/6k2viEQlP7OaqgM5UvEZg3iR4rxEYZJaITmUVjneAqDdaVPUB4IFUxRALIi4LbRYOwzAMIxzPPQeXXlqzxm6jRnDIIU5gDh9enWX96itXguzFF93cmvr1XaZz+HD36No1PivC5s3V3s9gAf/ll05Uhvo/Q583aBA5W+w91q51gq9lS7jkEucJ7tcvfd7Y+vWdleMXv3BZ42eecbaPeFCFRx5xZdaiiWdw/uuCguQK6KCqn0YEbr21ZgUpcK9vvTU+AZ2qbHadVOHIFoqKLANtGEbuIyLDgD8CBcAjqvqbkPdvBLx/MfWBbsCBqrpBRFYAVcAeYHe+TIh84QU3say83Ik3z4rQoYMTWeE4/3yX6fzwQyem//tflz298Ubo3Nl/Vrqyslosf/NNzfc6dHBxnHGGq2bhieAVK9zyu+/2b3IRTFFRtchu2dJll1u3dvaM005zfuZMYfBgOOII17o6XgH97ruupNwtt9S+rYi7PsnwQM+a5Y7XoEHdWBKywQIRiWQ2AktlNtsEdBCWgTYMI9cRkQLgQeBkYDUwS0ReUNV9NfpV9W7g7sD2ZwDXq+qGoMOcEDrZO5eZNs2VOu3TB159NTYrRv36Lts5aBD83//BqlXueP/9L0yZ4kRvbTRv7gT7aafVrIF7yCFuklg09uxxk8U8Yb1rV7VYbtkyswRybYg48fOznzlLR7iJcbXxyCNOFJ97rr/tmzVLPLE2ebL7vfG+yKTakpAtFohIdOzoYg63PlaSnc0OJsunNyQXy0AbRmSGDBnCK6+8UmPdfffdx1VXXRV1H6+E2WmnncbGMP1lx48fzz333BP13FOnTmXRouoeTLfffjvTp0+PIfrwzJw5k9NPPz3h42QZ/YClqrpMVXcCU4Czomw/GvhHnUQW4MMPXQOFyZNdd7OPPnKluDZudGWs6pLXXnMlzHr2dLEk6mPu0ME1yXjhBfd5tm2r/fHNN/D22/Dooy5z6sVTm3gGlx1v2dIJ7gEDXGvo7t1d57psEs8eF13kbDMTJ8a+76ZNzv5x/vn+rRTJ0AW33rp/Nz1PxKWCaKIx3Uye7O5y1KvnlpMn77/NhAn7/27H2wgsmdnsUExAB2EZaMOIzOjRo5kyZUqNdVOmTGH06NG+9p82bRotWrSI69yhAvrOO+9k6NChcR3LoD2wKuj16sC6/RCRJsAwXDlSDwVeFZGPAzX6w+13uYhUiEjFunXrYg7w5ZddB7Uf/9hNwuvfHw491JVEa9jQVXDo2tVldVPZ62bmTNdY4ogjXAbxgANSdy7DH61aubsBkybtLxJr4x//cF9I/ud//O+TDAGdShGXCefzi5cZ9+p+e5nxUBE9Zoz7guSVLOzUyb2OJ2McKWsdTzY7FBPQQVgG2jAiM3LkSP7zn/+wI3DPecWKFXz99dcce+yxXHnllfTt25cePXpwxx13hN2/tLSU9evdXf8JEyZwxBFHMHToUD799NN92zz88MMcffTR9O7dmx/+8Id8//33vPfee7zwwgvceOONlJWV8cUXXzB27Fj+9a9/ATBjxgzKy8vp2bMnl1xyyb74SktLueOOO+jTpw89e/ZkyZIlUT/fhg0bOPvss+nVqxcDBgxg3rx5ALz55puUlZVRVlZGeXk5VVVVrFmzhsGDB1NWVsaRRx7J22+/ndjFrVvCTQWL5JI9A3g3xL4xSFX7AKcCV4vI4P0OpjpRVfuqat8D4ygue9ttsG4dLFniPKsvvuhaC//+965V8ciRruVxVZXLSN5+e3Sfbzy8847rXNa5s8tCt2qV3OMb8XPFFS6b/PTTse33yCPQu7crL+iXZHigUyniMuF8HrVll2PJjI8Z43z8e/e6Zbx2i2Rms0MxD3QQloE2soXrroM5c5J7zLIyuO++yO+3atWKfv368fLLL3PWWWcxZcoUzjvvPESECRMm0LJlS/bs2cNJJ53EvHnz6NWrV9jjfPzxx0yZMoVPPvmE3bt306dPH44K/Ec755xzuOyyywC47bbbePTRR/nJT37CmWeeyemnn87IkSNrHGv79u2MHTuWGTNmcPjhh3PhhRfy5z//meuuuw6A1q1bM3v2bB566CHuueceHnnkkYif74477qC8vJypU6fy+uuvc+GFFzJnzhzuueceHnzwQQYNGsSWLVsoLCxk4sSJnHLKKdx6663s2bOH72NNhaWX1UCHoNclwNcRth1FiH1DVb8OLL8VkedxlpC3khlgQYGbyFZba+ddu+DKK115tS+/dPWCk2FL+OAD5zdu3x5mzHDl6IzM4dhjXWvtv/7VtZH2wyefwMcfu9J1sVQTadbMfZlLhAkTXCWTYPtRIiKutgmCEybU9EAnej6/MdXmu05HZtw7dyomVFoGOgjLQBtGdIJtHMH2jWeeeYY+ffpQXl7OwoULa9gtQnn77bcZMWIETZo0obi4mDPPPHPfewsWLOC4446jZ8+eTJ48mYULF0aN59NPP6Vz584cHmgfdtFFF/HWW9Va7pxA/92jjjqKFStWRD3WO++8wwUXXADAiSeeSGVlJZs2bWLQoEHccMMN3H///WzcuJH69etz9NFH8/jjjzN+/Hjmz59PUXYVd50FHCYinUWkIU4kvxC6kYg0B44H/h20rqmIFHnPgR8AC+ok6jA0aOBE8513OivH8OHV3ePipaIChg1zovn1151X2MgsvMmEH34Ic+f62+fRR513eswYfz5cj2TogjFj3O9TkyaJWxL82CCSaYHwi5/scroy48nKZodiGeggiovdH8revdnfPcrIbaJlilPJ2WefzQ033MDs2bPZtm0bffr0Yfny5dxzzz3MmjWLAw44gLFjx7J9+/aox5EIKaCxY8cydepUevfuzRNPPMHMmTOjHqe2vkuNGjUCoKCggN2hs3h8HEtEuOWWWxg+fDjTpk1jwIABTJ8+ncGDB/PWW2/x3//+lwsuuIAbb7yRCy+8MOrxMwVV3S0i1wCv4MrYPaaqC0VkXOD9vwQ2HQG8qqpbg3Y/CHg+8POrD/xdVV+uu+j3R8R1k+vY0XlbBw92FS5KSmI/1pw5rrTcAQc48dw+rDPcyAQuvNBNqPzrX+Ghh6Jvu22bE5gjR7oKKLFUqEhWYk0ERo92NpJI+Ck957eqxJgxdVtxw092OR2Z8VRiMjEIL4m0dWv07QwjX2nWrBlDhgzhkksu2Zd93rx5M02bNqV58+asXbuWl156KeoxBg8ezPPPP8+2bduoqqrixRdf3PdeVVUV7dq1Y9euXUwOSqkUFRVRFea/WNeuXVmxYgVLly4FYNKkSRx//PFxfbbBgwfvO+fMmTNp3bo1xcXFfPHFF/Ts2ZObb76Zvn37smTJEr788kvatGnDZZddxqWXXsrs2bPjOme6UNVpqnq4qh6iqhMC6/4SJJ5R1SdUdVTIfstUtXfg0cPbNxO46CInjpYvd9Um5s+Pbf/58+Hkk90t+9dfT31WzEiMli3hRz+Cv/2t9v/Zzz3nKp5cemnsFSpq80D7zWZv2RK9C6HfCXbJtkHEko2Php/scjoy46nEBHQQ3i+3+aANIzKjR49m7ty5jBrltFXv3r0pLy+nR48eXHLJJQwaNCjq/n369OG8886jrKyMH/7whxx33HH73rvrrrvo378/J598Ml2D2oSNGjWKu+++m/Lycr744ot96wsLC3n88cc599xz6dmzJ/Xq1WPcuHFxfa7x48dTUVFBr169uOWWW3jyyScBV6rvyCOPpHfv3jRu3JhTTz2VmTNn7ptU+Oyzz/LTn/40rnMayeXkk125N1Xnk50xI/K2qjB7tvNPDxjgJpc1bOjEc+fOdRezET9XXOGywyHFgfbjkUdczezjj/cvQD1h+bvfuVbm4aq9+BW9qrULaL/CPpk2CL/x+8HvZL1U2SnSgqpm1eOoo47SVPH3v6uC6uLFKTuFYcTNokWL0h2CESPhfmZAhWbAWFpXj1SO2ZFYuVL1yCNVGzRQfeqp6vWbN6s+95zqpZeqtmvnxnsR1X79VH/1K7efkT3s3avavbvq0UdH3uazz9zP+f/+z73u1Mm9Dn106lS9z9/+ptqkSc33Gzd264PxcyxV1aoqt/53v4scp0j4Y4nU3C5cbE2a7B+bH/zG75e//c3tK+KW8cSUiUQasy0DHYRloA3DMLKfDh1cJvq445xX9rLLXHa6VSvXhOSf/3QZ6ieecE1KPvzQlcLr0KHWQxsZhIjLQs+a5apshOOxx1xVF6/1t59Mabhs8LZt+2eD/WazPfdZtAy038xyMm0QsWbja7N51HV2OVn2k3gxAR1EcbFbWiUOwzCM7KZFC3jpJbjgAncL/6uvXHOWN96A9etdR7qLLrISddnOBRdAYaGbTBjKrl3uS9Lw4XDwwW6dHwHqV1j6Fb2eh7pZs8ifI5Z6xckSqn7iT6bNI5lkQlwmoIOwDLSR6bi7SUY2YD+r9NOwofOubt4MixbB3XfDkCGu/J2RGxxwAJx3nhNOocmvadPcHYbQzoO1CVC/wtiv6PWTgU7HBLt4s/GZ0BY8E+IyAR2EZaCNTKawsJDKykoTZlmAqlJZWUlhYWG6QzGILlyM7OeKK1yWN3Qy4SOPQLt2rh18LIQTlo0ahZ8Q50f0+hHQ3vHq0gKRzGx8XZMJcVkd6CC8X24T0EYmUlJSwurVq1mXaFsso04oLCykJJ5ixIYRI37qB2cqyYh9wADo2dPZOAKNTPnqK5eBvuUWqB+j0gnuXvfll+75uHHh4/JTb9mvgE4HtcXfsWP1NQhdn04yIS4T0EF4GWizcBiZSIMGDehs9bUMwwjCTwvlTCWW2KMJba8z4U9+4tp1H3UUPPmky+Reckl8sXnC8osv4NBDoU+f+I4D1QI6mgc6U8nU5ieZEJdZOIJo1Mh9U7UMtGEYhpENZIIXNF78xu5nwtiPfwyNG7ss9N69rnX3iSe6+s+J4IneaM1UasPbNxMz0LWRqc1PMiEuE9BBiLgstGWgDcMwjGwgUzvT+cFv7H6EdosWMGoU/P3v8MILsGzZ/pMH4yEZ1s5MtnD4IVObn6Q7LhPQISSr771hGIZhpJp0dKary/bP4F9od+rk2nqPGOFi2749vriCadzYHSsZAjobLRxGZExAh2AZaMMwDCMT8CNU/ZZS83MsP5neWOrv1nZOv7H7rVf8299Wv967F665JvEMukjiibWqKifECwoSi8XILExAh2AZaMMwDCPd+BWqfrygfo/lJ9ObTN+yXx+r33rF27bVHlc8FBUl7oHOVvuGERnJtpqyffv21YqKipQd/9RTobISPvooZacwDCOPEZGPVbVvuuOoK1I9ZucqpaXhy3R16uT8nqk4lp/t6tVzgjgUEZf1jfWcfqmt3J3fuOKhWzdXJu+ZZ+Lbf8wY1y5+6dLE4jDSQ6Qx2zLQIVgG2jAMw0g3yZwc6PdYfjK9yfYt+yVZ3QPjIRkWDstA5x4moEMwD7RhGIaRbpIpCP0ey4+lIpm+5WTiN654SIaAtgmEuYcJ6BAsA20YhmGkm2QKwliOVVumN5m+5WSSyrrA5oE2wmECOgRPQCfqmTIMwzDyj2SVeEumIEy2uPRTfzcdjS5SVRe4WTOzcBj7Y628Q/DaeW/dar/whmEYhn+S3VbbayedDJJ5rEw+ZyowD7QRDstAh+D9kpsP2jAMw4iFbG6rbUTGPNBGOExAh+BloM0HbRiGYXj4sWbEUnmiLltmG4lRVOS6Gu7eHfu+quaBzlVyXkDHOkhZBtowDMMIxm8jEr+VJ2Lp5mekHy97HM9Ewu+/dz9jE9C5R04L6HgGKctAG4ZhGMH4tWb4rTxhVo/swhO/8egCbx8T0LlHTgvoeAapRP5QDMMwjNzDrzXDb+WJZDcZMVKLCWgjHDldhSOeQcrLQJuFwzAMwwBnwQjXljqcZcNP5YlYjmekn2QIaJtEmHvkdAY6nk5IloE2DMPIfOpyEl6ym4LUdZMRIzES8UB7+1gGOvfIaQEdzyBlGWjDMIzMpq4n4aWiEUldNxkx4scsHEY4clpAxzNINWoE9etbBtowDCNTSfYkPD/Z7GR3uUtV1zwj+ZiANsKR0wIaYh+kRFwW2jLQhmEYmYnf+S1+hLGVlDNqwzzQRjhyXkDHQ6JdhwzDMIzU4Wd+i19hbCXljNowD7QRjpQJaBHpICJviMhiEVkoIj8Ns42IyP0islRE5olIn1TFEwuWgTYMI5cRkWEi8mlg7L0lzPs3isicwGOBiOwRkZZ+9q0L/Mxv8SuMraScURtNmri7GJaBNoJJZQZ6N/AzVe0GDACuFpHuIducChwWeFwO/DmF8fgm3zPQK1bAT38aX9tSwzAyGxEpAB7Ejb/dgdGhY7Oq3q2qZapaBvwv8KaqbvCzb13gZ36LX2EcT7UmI78QcQI4XgHduLGbW2XkFikT0Kq6RlVnB55XAYuB9iGbnQU8pY4PgBYi0i5VMfmlqCi/M9D/+hfcfz8sXpzuSAzDSAH9gKWqukxVdwJTcGNxJEYD/4hz35jxW56utvktfoWxlZQz/BBvYq2qyrLPuUqdeKBFpBQoBz4Meas9sCro9Wr2F9mIyOUiUiEiFevWrUtZnB7FxfmdgV62zC1XrEhrGIZhpAZf4y6AiDQBhgHPxrJvvGN2Mif0+RXGVlLO8EOzZvF7oM3/nJukXECLSDPc4HudqobmdSXMLrrfCtWJqtpXVfseeOCBqQizBvmegfYE9PLl6Y3DMIyU4GvcDXAG8K6qbohl33jH7GRO6ItFGFtJOaM2EslAm4DOTVLqyhGRBjjxPFlVnwuzyWqgQ9DrEuDrVMbkB8tAu6VloA0jJ4ll3B1FtX0j1n1jJtkT+vy01TYMP5iANkJJZRUOAR4FFqvqHyJs9gJwYaAaxwBgk6quSVVMfvH+UPbuTXckdc+ePdXC2QS0YeQks4DDRKSziDTEieQXQjcSkebA8cC/Y903XmxCn5GpmAfaCCWVFo5BwAXAiUHlkE4TkXEiMi6wzTRgGbAUeBi4KoXx+MZr5711a3rjSAdffQW7drnnJqANI/dQ1d3ANcAruMndz6jqwpCxGWAE8Kqqbq1t32TFZhP6jEylqMg80EZNUmbhUNV3CO+XC95GgatTFUO8BHcdyrdffM++ccQRJqANI1dR1Wm4BEbwur+EvH4CeMLPvsnCs1vcequzbXTs6MSz2TCMdJNIGbt80xH5gnUiDIOXgc7HiYTexMETToDvvoNNm9Ibj2EY+YVN6DMyEfNAG6GYgA5DIn3vs51ly6CgAI47zr22LLRhGIaR7xQVwbZtsTUYU3UWDvNA5yYmoMOQzxnoZcvcbdPDDnOvTUAbhmEY+Y6XWIvFB/399+5OimWgcxMT0GHI9wx0ly6uAxiYgDYMwzAML4sci4D2tjUBnZuYgA5Dvmegu3SB1q3d7HcT0IZhGEa+E09izdvWBHRuYgI6DPmagd6yBb79Fjp3dp27SktNQBuGYRiGCWgjFBPQYcjXDLQnlrt0ccvOnU1AG/lFZSXMn5/uKAzDyDQSEdA2iTA3MQEdhkaNoH79/MtAezWgPQFdWlpd1s4w8oHf/MZVoMnHLqSGYUTGPNBGKCagwyDistD5loEOJ6A3bYKNG9MVkWHULV995X7n7c6LYRjBmIXDCMUEdATiLZqezSxb5r44tGzpXlslDiPfqKx0y0WL0huHYRiZhQloIxQT0BEoKsrPDHSXLi4DDyagjfzDE9ALF6Y3DsMwMgvzQBuhmICOQHFxfmagO3eufm0C2sg3NmxwSxPQhmEE06SJSy6ZB9rwMAEdgXzLQKu6CYOe/xmgVSv3zdkEtJEvWAbaMIxwiLj/h7FmoAsLXVECI/cwAR2BfMtAf/MNbN9eU0BbLWgjn9i1y31prlcPFi+2ShyGYdQk1rlRVVWWfc5lTEBHIN8y0KEVODyslJ2RL3j2jd69Yds2++JoGEZN4hHQ5n/OXUxARyDfMtDRBPSKFc7iYRi5jGffGDzYLc3GYRhGMM2axe6Btgx07mICOgJFRe6XP19u4y5b5iwbnTrVXF9a6jLxVgvayHU8AX3ccW5pAtowjGDMwmEEYwI6AsXFLuu6dWu6I6kbli2D9u1dF8ZgrBKHkS94ArpzZygpsVrQhmHUxAS0EYwJ6AjEU/Mxm/FqQIfilbUzAW3kOp4HulUr6N498zPQInK6iNgYbhh1hHmgjWBs8I1AcbFb5stEwtASdh6WgTbyBS8D3aoV9OiRFZU4RgGfi8jvRKRbuoMxjFzHPNBGMCagI5BPGejt2+Grr8IL6AMOcNfCKnEYuU5lJTRsCE2bOgG9bVtm/96r6o+BcuAL4HEReV9ELhcR+5dtGCnALBxGMCagI5BPGWgvuxxOQFstaCNfqKx02WcRZ+GAzPdBq+pm4FlgCtAOGAHMFpGfpDUww8hBiorg++9hz57at1U1AZ3rmICOQD5loCOVsPMwAW3kA5WV0LKle+4J6Ez2QYvIGSLyPPA60ADop6qnAr2Bn6c1OMPIQTxd4MfGsW2bs4CZBzp3sQaTEcinDLQnoL0Jg6GUlsLMme4btUhdRWUYdYuXgQZo3txV4shkAQ2cC9yrqm8Fr1TV70XkkjTFZBg5S3BirXnz6Nt6yTfLQOculoGOQL5loBs3hoMOCv9+587uOnz3Xd3GZRh1SbCABueDznALxx3AR94LEWksIqUAqjojXUEZRq7iZZP9ZKC9bUxA5y4moCOQTxlorwJHpOyyVeIw8oENG2oK6O7dM74Sxz+B4Oj2BNYZhpECYkmsWQY69zEBHYFGjaB+/fzJQEfyP0O1gM7kigSGkQiq4TPQGV6Jo76q7vReBJ43TGM8hpHTmIA2gjEBHQER94uf6xloVf8C2jLQRq6ydSvs3Lm/gIaM9kGvE5EzvRcichawPo3xGEZOE4+AtkmEuYsJ6CgUF+d+Bnr9eufViiagW7Rw18IEtJGrBDdR8ciCUnbjgF+IyEoRWQXcDFyR5pgMI2cxD7QRjFXhiEI+ZKBrq8ABVgvayH08Ae2VsQP3pTGTK3Go6hfAABFpBoiq5vjXfcNIL2bhMILxJaBFpCmwTVX3isjhQFfgJVXdldLo0kw+ZKBrqwHtUVpava1h5BrhMtDgbByZKqABRGQ40AMolMAsYFW9M61BGUaOYgLaCMavheMt3ADdHpgBXAw8kaqgMgXLQFfTubPLQKumPCTDqHOiCejFi/11HqtrROQvwHnATwDB1YXu5HPfYSLyqYgsFZFbImwzRETmiMhCEXkzaP0KEZkfeK8iCR/FMLKCJk3cHVnzQBvgX0CLqn4PnAP8SVVHAN1TF1ZmkA8Z6OXLoW1bNzBEo7TUebo8oWEYucSGDW4ZTkBv356x9qWBqnoh8J2q/go4BuhQ204iUgA8CJyKG8dHi0j3kG1aAA8BZ6pqD5w4D+YEVS1T1b6JfwzDyA7q1YOmTf17oBs1ggYNUh+XkR58C2gROQYYA/w3sC7n/dNFRbkvoGurwOFhlTiMXCacBxoyvqX39sDyexE5GNgF1HIvCYB+wFJVXRYofTcFOCtkm/OB51R1JYCqfpukmA0jq/GrC6qqzL6R6/gV0NcB/ws8r6oLRaQL8EbKosoQiovzw8JhAtrIdyor3d97aLYowwX0i4FM8d3AbGAF8A8f+7UHVgW9Xh1YF8zhwAEiMlNEPhaRC4PeU+DVwPrLw51ARC4XkQoRqVi3bp2/T2MYWYAJaMPDVxZZVd8E3gQQkXrAelW9NpWBZQJFRe42zN697tZNrrFzJ6xaVbv/GUxAG7lNaBMVj+Ji6NAh8wR0YByeoaobgWdF5D9Aoapu8rN7mHWhsxvqA0cBJwGNgfdF5ANV/QwYpKpfi0gb4DURWaKqb9U4mOpEYCJA3759beaEkTPEIqDN/5zb+JKFIvJ3ESkOVONYBHwqIjemNrT0U1zsJs1t3ZruSFLDypXuy4GfDHSLFtC8uQloIzeprNzfvuHRvXvm1YJW1b3A74Ne7/ApnsFlnIO90iXA12G2eVlVt6rqetxE8t6Bc30dWH4LPI+zhBhGXtCsmX8PtGWgcxu/edXuqroZOBuYBnQELkhVUJlCLCVrshG/Jew8vEochpFrRMpAQ0ZX4nhVRH4oXv06/8wCDhORziLSEBgFvBCyzb+B40Skvog0AfoDi0WkqYgUwb7ypj8AFiT2MQwjezALh+HhV0A3EJEGOAH970D956i35UTkMRH5VkTCDq6BEkmbAqWQ5ojI7TFFXgcUF7tlrvqgly93S78C2pqpGLlKbQJ6+/bqv5cM4gbgn8AOEdksIlUiUutopaq7gWuAV4DFwDOBuS3jRGRcYJvFwMvAPOAj4BFVXQAcBLwjInMD6/+rqi+n4sMZRiZiAtrw8FtJ46+4CSpzgbdEpBNQ20D9BPAA8FSUbd5W1dN9xlDn5EMGumFDOPhgf9uXlsKrrzpbS8w5L8PIYDZsiC6gwfmgDz207mKqDVWN+9+zqk7D3U0MXveXkNd34yYoBq9bRsDKYRj5iHmgDQ+/kwjvB+4PWvWliJxQyz5viUhpArGlnVzPQC9b5mwZfidIlpbC99/D+vVw4IEpDc0w6ow9e2DjxsgCuls3t1y0CM4KLfaWRkRkcLj1oRP6DMNIHs2aWQbacPht5d0cuAPwBuw3gTsBv5NWInFM4Fbg18DPVTXsXPdAqaTLATp27JjgKf2TDxloPxU4PIIrcZiANnKF775zd1UiCehMrcQBBE/kLsRN5vsYODE94RhG7lNU5BJJe/ZAQUH4bVRtEmE+4NcD/RhQBfwo8NgMPJ7guWcDnVS1N/AnYGqkDVV1oqr2VdW+B9ahcsuHDLRf/zNYKTsjN4nUxjuYHj0yT0Cr6hlBj5OBI4G16Y7LMHIZTxRHq861fbsT2Cagcxu/AvoQVb0j0LlqWaBtbAzSa39UdbOqbgk8n4abqNg6kWMmm1zOQH/3nbttbQLayHcidSEMpkcPWLIkIytxBLMaJ6INw0gRfnSB9555oHMbv5MIt4nIsar6DoCIDAK2JXJiEWkLrFVVFZF+ODFfmcgxk433h5KLGehYK3CAqwN9wAEmoI3cwk8Gunv36kocmTKRUET+RHU1pHpAGW6it2EYKcITxX4EtGWgcxu/Anoc8FTACw3wHXBRtB1E5B/AEKC1iKzGeagbwL7Z3iOBK0VkN06Mj1LVjOpYVVgI9evnZgY61hrQHqWlGVnOyzDixq+FAzKuEkdF0PPdwD9U9d10BWMY+YAniqM1U/HeMwGd2/itwjEX6C0ixYHXm0XkOlyN0Ej7jK7lmA/gytxlLCLuDyAXM9CegI5lEiE4Ab1kSdLDMYy0sWGDW9aWgQYnoDOoEse/gO2qugdARApEpImqfp/muAwjZ4nFwmECOrfx64EG9vmWPTl5QwriyTiKi3M3A92qVfVESb94zVQy616BYcRPZaW70xTtb6GoKCMrccwAGge9bgxMT1MshpEXmIA2PGIS0CHkRSuNXM5Ax2rfACegt22DdeuSHpJhpIXKSjeBsLbmQD16uFrQGUShNxEbIPC8SRrjMYycJxYPtE0izG0SEdB5kYPM5Qx0PALas3zYREIj1Xz7rWtikuqsb7Q23sFkYCWOrSLSx3shIkeR4ORuwzCiYx5owyOqgBaRKhHZHOZRBfhsAJ3d+G3bmU3s2QNffhl/BhpMQOcjy5bB11/X3fkqKpxgfe+91J7Hy0DXRo8erhKHN38gA7gO+KeIvC0ibwNPA9ekNyTDyG3MwmF4RBXQqlqkqsVhHkWq6reCR1ZTXBy7hWPyZCc069Vzy8mTUxFZ/KxeDbt3xyegO3VyS6vEkX/86Efwk5/U3fm837HVq1N7Hr8Z6OCJhJmAqs4CugJXAlcB3VT14/RGZRi5TdOmbmkWDiMRC0deEGsGevJkuPxyl+FVdcvLL88sER1vCTtwXyhatrQMdD7y+efw2Wd1d75MFdCZ4oMWkauBpqq6QFXnA81E5Kp0x2UYuUy9ek4Y1yagGzZ0DyN3MQFdC7FmoG+9Fb4PKSL1/fdufaYQbwk7D68Sh5E/bNrk/g68L4Z1gfd7mmoBvWGDPwFdVAQdO2ZOBhq4TFU3ei9U9TvgsvSFYxj5QbNmtXugzb6R+5iAroWiIvfHsHevv+1XroxtfTpYtgwKClxZrngwAZ1/rFrlllVVTkzXBXWRgd62zT38CGhwPugMEtD1RKprh4hIAWA5L8NIMbXdma6qMgGdD5iAroXiYpdx27rV3/YdO8a2Ph0sW+a8zPXjdLFbLej8wxPQ4LLQqUa1OgMdfO5k46cLYTDdu2dUJY5XgGdE5CQRORH4B/BSmmMyjJzHBLQBJqBrxc+M22AmTIAmIZVYmzRx6zOFeEvYeXTu7KoRfPtt8mIyMptgEVsXd1O++85ZRtq2dX97qarFHquA7tEDduzImEocN+OaqVwJXI3rDNs46h6GYSSMHwFtEwhzHxPQteB1J9u82V91jTFjYOJEl+EVccuJE936TGH58sQEtFfKzipx5A91nYH2freOO84tU2Xj8AS0nzJ24AQ0ZIaNQ1X3Ah8Ay4C+wEnA4rQGZRh5gJ9JhJaBzn1MQAeIJI69P4JnnvFfXWPMGGdx2LvXLTNJPFdVuS6CyRDQ5oPOH1auhJISaNSobgX04MFumWoB7TcD3a2bW6ZTQIvI4SJyu4gsBh4AVgGo6gmq+kD6IjOM/MCbGxUJm0SYH+RFLefa8ErPedUzPHEM1RPtHnwwcnWNTBLIteEJk3grcEB1LWgT0PnDqlXOx9+4cd1YODJVQHuVONJcym4J8DZwhqouBRCR69MakWHkEeaBNsAy0ED00nPeH0Ekv2+8YiJdzVYSqQHtUVTkBIcJ6Pxh1Sr3ZbJTp7rJQC9b5mwVXbu616kS0Bs2uKVfAQ0ZUYnjh8A3wBsi8rCInARILfsYhpEkzANtgAloIHrpOU9AR/oHG091jXQ2W0mGgIbMLmV3551w6aXpjiJ3UHUCtkMH9/teVxnoLl1cI4KDDkptBrppU2dN8UuPHumtxKGqz6vqebguhDOB64GDROTPIvKD9ERlGPlDs2auMle48raqloHOF0xAE730nDeJ8PTTk1ddI5ZmK8nOVC9bBs2bwwEHJHaczp0zV0A//zw8/bT/2t1GdNavd1VXvAz0mjWuEkUqWb682mZUUpK6UnZ+uxAG0727+/xffJGamPyiqltVdbKqng6UAHOAW9IblWHkPp44DlfedscO9+XaBHTuYwKa6KXnvD+CI45IXnUNv81W/Gaq/YrsyZPh0UddI4zOnRMT46WldduVzi979rjs4NatmSvwsw3v97Jjx2r/eyprM3uTb4MFdCoz0LEKaK8SR6a09AZQ1Q2q+ldVPTHdsRhGrhOtvK23zgR07mMCmuil5woLXcORqqrkVdfw22zFT6Y6FpF9+eUukwiJ20ZKS92xvvkmvv1TxYoV1Z9x3ry0hpIzeGLZs3BAam0cX38NO3fWnYD2W8LOo3t3t8yEUnaGYdQ9fgS0eaBzHxPQASKJY5HaJwzEit9mK34y1X7tILHYRvyQqaXsgrOC8+enL45cIlhAexnoVE4k9CpweD79khLYuDF62ah4iScD3awZPPssnH9+8uMxDCPz8cSxZaDzGxPQPiguTm4nNL/NVvxkqv3aQfxu5xc/AjodlUY8Ad2mjWWgk8WqVW6S3YEHOjErkloB7U10Dc5AA3z1VfLPFY+ABjjnnMRKQRqGkb144jjcl3pvnQno3McEtA+SnYEGf3YQP5lqv3YQv9v5pbZa0OmqNLJoEbRrB4MGWQY6WaxaVS2cGzZ01zeVFo7ly925vN9NrxZ7sm0ce/e6luHxCGjDMPIX80AbYALaF8nOQPvFT6barx1kwgTn5a5tO780a+YykpHaeSfbMuKXxYudR7VnT/j8c9i2LbXnywdWrqz5RSvVtaCXL6/uegjVGehkC+hNm5yINgFtGEYsmIA2wAS0L1KRgfZLbZlqv3aQMWOgd28nohOtIuJx+OGRKxEk2zLiB1UXjyeg9+7NrEoJ2YrXRMUj1bWgg0vYAbRv75bJFtCxdiE0DMMAfx5om0SY+5iA9kG6MtB+8VsdZONGGDEi+nax+JbLy2Hu3PD1lpNtGfHDqlWufF337tCrl1tnNo7E2LPHVcUIFtCdOjkBnao628uW1RTQhYXQunXyS+fls4AWkWEi8qmILBWRsLWjRWSIiMwRkYUi8mYs+xpGLmMeaANMQPsinRnoZLF1qxMmRx4ZeZtYfcvl5W6wWLp0//f8WkuSiZdt7t4dDjkEGjc2AZ0oa9Y4ER2agd65E9auTf75duxwgj20U2YqStl5AjrWMnbZjogUAA8CpwLdgdEi0j1kmxbAQ8CZqtoDONfvvoaR61gVDgNMQPsi0zPQfli0yIninj0jbxNrh0Rv/aBB+4tsv9YS71jJqNYRLKALCtzSKnEkRnAJOw9vAmkqbBzel7fQChepFNB5mIHuByxV1WWquhOYApwVss35wHOquhJAVb+NYV/DyGnq1YOmTSML6IYN3cPIbUxA+6CoyGVas7k1tJeJjZaBjrVDotdEZf368JlqP9aSZFbrWLTITWxs3dq97tXLMtCJEtyF0COVtaBDS9h5mIBOKu2BYEPM6sC6YA4HDhCRmSLysYhcGMO+iMjlIlIhIhXr1q1LYuiGkRk0axZZQJv/OT8wAe2D4mIn7sL1vc8WFixwlobQW+PBJLNDol9izXpHy1QvWgTdulW/7tnT2Qy+/RYjTsJloFPZjdCr6hJOQFdWJreqyoYN7nepRYvkHTNLkDDrNOR1feAoYDhwCvBLETnc576o6kRV7auqfQ888MBE4zWMjCOStbOqyuwb+YIJaB9EK1mTLcyfX21tiEQyOyT6Jdasd6RMtWp1CTsPm0iYOKtWud//5s2r1zVv7h6pyEAvX+7K17VrV3O9J+CT2UylshIOOMCJ6DxjNRD0lYgS4Osw27ysqltVdT3wFtDb576GkfN4d6ZD2bLFBHS+kH//OuKguNgts9kHvWBBdP8zJLdDol+SlfX+5htXZSRYQHuf1wR0/ISWsPPo2DF1Fg7vLkMwqagFHW8XwhxgFnCYiHQWkYbAKOCFkG3+DRwnIvVFpAnQH1jsc1/DyHksA22YgPZBtmeg1693AjOa/9kj3g6JjRrFV2EjWVnv4AmEHm3aJNbSOx2tyDONSALaK2WXbEJrQHuYgE4eqrobuAZ4BSeKn1HVhSIyTkTGBbZZDLwMzAM+Ah5R1QWR9k3H5zCMdBJNQJsHOj+oX/smhiegszUDvWCBW9aWgfaLJ6pvvbU6C3nGGfE1ZQk+ltfxbsKE8FnvcBlPL1MdTkBD/BMJPcuIl/X2LCPBMecDK1e6coWhdOoE77yT/PMtXw4DBuy/3mumksxa0JWVcPDByTteNqGq04BpIev+EvL6buBuP/saRr4RbRJh+/2m1Rq5iGWgfeBZOLI1A+2nAkeseJlqVTj00MQqlMSb9Q7OVC9a5CaDtW1bc5uePd0XiD17aq6vLbucrlbkmcSOHW4CZiQLx8aNyf1SuXEjfPdd+Ax006bOr2wZaMMwMgHzQBsmoH2QCxnoli33n5iVLMrL4ZNPUnNsj9r82V4LbwmpEdCzJ2zfDl98Ub3OT+m8dLQizzQ8sRrJwgHJvR6RKnB4JLuUnQlowzDixTzQhgloH+RCBvrII/cXl8mirMyJn40bU3N8j2iZak9Ah2aWvaoNwTYOP9nldLQizzTClbDz8K5DMicSegI6UqnFZAroHTtcWUoT0IZhxEO4/hCq5oHOJ0xA+yCbJxGq+qvAkQieR3bu3NSdIxrr1rmJkt9/v39m+f/+z31xCJ5I6Ce7nOxW5Nk4ITGagM72DPSGDW5pAtowjHjwRHJwf4gdO2D3bstA5wsmoH1QWAj162enhWPlSif8k+l/DsUT0InYOObNg4VxzuVfvNgtp0/fP7O8bZurfR2cgfaTXY6lFXltJLPbYl3iieNwArptW2jQILkZ6GXLnI89UmOTkhLnyd6xI/Fz5XEXQsMwkoAnkoN90N5zE9D5gQloH4hE9jtlOsmuwBGOtm3dIxEBfd558OMfx7evV4EjUsfB3btrZqD9Zpf9TG70Q7ZOSFy1yrVFb9x4//fq1XPCOtkZ6EjZZ6gW8l8noW2HCWjDMBIh3J1p77kJ6PwgZQJaRB4TkW9FZEGE90VE7heRpSIyT0T6pCqWZFBcnJ0ZaC/z2qNHas+TyETCL7+EJUtgzpz42m4vWuRup0XKLDdv7rKb3q22ZGaX/RDLhMRMsnpEqgHt0alTzQx0orEvXx691Xwya0F7Arply8SPZRhG/hFNQJsHOj9IZQb6CWBYlPdPBQ4LPC4H/pzCWBImmzPQHTpEvi2eLMrLnZDdvj32fV99tfr566/Hvv+iRdCtm/M7h8ssX3yxs04EW0SSlV32g98JiZlm9ahNQAfX5k409r17a89AewI6GbWgLQNtGEYieCLZMtD5S8oEtKq+BWyIsslZwFPq+ABoISIpKrSWONmcgU6l/9mjvNzVWl4Q9n5DdF591RWeb9HC+ZhjxavAESmzfM01brt4OxLWRm2ZV7+WkUyzeqxcWXsG+uuvYdeuxGP/5hvnbfYjoJOZgTYBbRhGPJgH2kinB7o9EJxLWh1Ytx8icrmIVIhIxbp16+okuFCyMQO9a5ezRqTS/+wR70TC3budaD7lFDjxRHjtNZfB9MvGjbBmTXUHwnCZ5c6dXSOOeDoS1oafzKsn7L3uVJEsI8muPZ2IpaKqCjZtil62r1Mn95lXr0489tpK2IH7GywuTo6A3rDBTQ4O/WJjGIbhB/NAG+kU0OGqEoeVTqo6UVX7qmrfAw88MMVhhScbM9Cffw47d9ZNBrpzZ3eN5syJbb+KCieCTzkFhg51giu46UlteBU4unWLvE29eu4apCID7Tfz2qRJ9XY//3l4y0gya08naqmIVsIuNK4vv4wt9nDCvrYSdh7JKmVnTVQMw0gEE9BGOgX0aiD433MJkIT59akhGzPQdVGBw6NePejdO/YM9CuvOLvFSSc5AQ2x2Ti8ChxeBjoSPXu6DHQs2W0/1JZ53bYNrr4azjnHZVdPOw1+8hN49NH990lm7Wm/wj5SltqPgA6uBe039kjCfurUmseMhAlowzAygWgeaJtEmB+kU0C/AFwYqMYxANikqmvSGE9UsjEDPX++q4HctWvdnK+83DVT2bPH/z6vvgpHH+3EzKGHOgH12mv+91+0yN2KLy2Nvl2vXk40ffON/2P7IVrmdfFi6N8fHnoIfvYzeO89eO45l22/7DL4+99r7pPM6iB+LBXRstR+BLT33pdf+o89krB/+WU4+GD3s4yGCWjDMDIBTySbBzp/SWUZu38A7wNHiMhqEblURMaJyLjAJtOAZcBS4GHgqlTFkgzCte3MdBYsgMMOq12UJIvycieGPv/c3/YbN8KHH8IPfuBei7gs9Ouv+xfhixa5LwgFBdG387LwybZxhMu8Nm7sPsdRRznBPm0a3HMPNGwIjRo5EX388XDhhe55MMmqDtK2bfj1wYI/WpZ65UqXlT744MjnKCyEgw6qFuV+Yo8k7Lduje5/9ujQwV3TXbtq3zYalZVWws4wjPgpKHBjf2gGukEDN84buU8qq3CMVtV2qtpAVUtU9VFV/Yuq/iXwvqrq1ap6iKr2VNWKVMWSDIqLXZYuuG1nplNXFTg8Yp1I6AnlU06pXjd0qBPWs2f7O4ZXgaM2PAGd7ImEoZnXDh2cleXRR2HgQJeRP/XUmvs0aQIvvAD9+sGoUU5gJ5OdO90gHkqopSJalnrVKmjXrvo4kaweobWgayNSxr6goHb/M7gMtKqbOJoIloE2DCNRQq2dVVWWfc4nrBOhT8JNGMhktm51zUPqwv/s0b27y7L6FdCvvOKua//+1etOPNEt/figq6qc2PMjoFu1ctnUVEwk9DKv77/vWr7PmuVqUr/yihOh4SgqcsK5Z0/nj54xw//5/JTNW7kSbrihuvJHy5b7Wyqi2U+Ca0BHs3oE14L2Q6SM/d69/gU0JFYLWtVV4TABbRhGIjRrtr+ANv9z/mAC2ieegM4WH/SiRU4o1GUGukEDdz4/AlrVCcyTTqqZLW3TxmVw/QjoJUvc0o+AhuqJhKng3nvh2GOdEHzrLfjf/63dVtKihfOAH3YYnHkmvPtu7eeprbrGJ5848f7jH8Pvf1+dST7ttP0tFdEm/gUL6GhWj06dnFj3OzkznFf6rrvc/qEWjnBfFEJrQcdTqq+qypVPNAFtGEYiWAY6vzEB7ZPiYrfMlgx0XVbgCKa83JWyq01Qff65E3+e/zmYk0+Gd97ZX7SF4pWw8yuge/VyXyx27/a3vV+WL3fZ3lNPdZ994ED/+7Zq5SZNlpS4/StqMTJFE7M7d8LYsdC6Nfzxj+49EZfh//DD/Y8VaeLf+efXFNDRrB4dO7ruk7GUZw/1Snu/o8EZ6EhfFN57z72/enX8pfqsiYphGMnAmxvlsWWLCeh8wgS0T7ItAz1/vrs17mdiVjIpL4f16+Grr6Jv57XvDvY/ewwd6sTgO+9EP8aiRS57fcgh/mLr2dMd97PP/G3vFy9b/tvfxtcyvW1bZ+Fo3dp9oYhmM4kmZidMcPtOnFhzglz//u4Ly4YwfUHDTfyrrHTl9zyLRzSrR3Apu3gJVwM60heFCRNcU5zVq+PvfhhJQCfSeMYwjPzDMtD5jQlon2RjBrp799ptBMnG70TCV15xwjecwD/2WOelrs3GsWgRHH648x37IVUTCadPd/7qRMoFlpQ4Ed2kifsCEakhTSQx27ZttXXjjDNqvud5zD/6yF8soSXsolk9PAEdiw86lOXL3c87uOJHJEG+alV1Kbt4ux+GE9CJNp4xDCP/MA90fmMC2ifZNomwritwePTq5ewA0QT0zp3wxhvhs8/gMowDB/oT0H7tG+C6FRYUJHci4d69TvgOHeo+dyJ07uwqkxQUQN++cOONNW8PQuRJeA0a1LRuBNO3r8uqfvCBvzhCBXS0Gs/B3QjjZflyd8zgL3vRst6egI63c6MnoIOz9LFksy1TbRgGWAY63zEB7RMvA50NFo71612t3Lr2P4P79n3YYdEF9HvvuSoh4fzPHkOHumOsXx/+/W3bXJWRWAR0o0ZwxBHJzUDPnesEmddFMVEOP9zdPbj4Ylc7uls3Vyva85SHE7PDhrmsa6h1w6OoCHr0CO+DDke4JiqRajwfcID7mSdi4Vi2bP8KHNGy3h06OAEdS+fGYNF7zTVuXXAG2m822zLVhmF4mAc6vzEB7ZNsykB7EwjTkYEGZ+OIJqBffdXZLk44IfI2niB9/fXw73/6qRMwsQhoSH4lDi9LftJJyTtmq1bw8MOuKkfLlvDDH8LppzuhCTXF7PPPw4svhrduBNO/v7Nw+KmWsWqVy2i3aVP7tiKxl7ILZfny/QV0tKx3SYmrA33eef66H4aK3u++c+tfeql6G7/Z7Hh914Zh5B6egPbGVctA5xcmoH1SWOhEXzZkoNNVgcOjvNyJlXCT1sD5n485pjqrH46+faF588g2jkWL3DJWAd2rlxOfyfo5zpjhYojWsS9eBg6Ejz925ejeestlkSdMgB073Pvhqm5Eon9/9/NYurT2865c6bK89XyODl4pu3jYvNll8MN54SNlvUtKXAOeb77x1/0wnOgFuP326ud+s9nx+q4Nw8g9ioqqG6zt2OE6pJoHOn8wAe0Tkf39TpnK/Pnu1nqkJh6pxptIGG4i3Lp1rstgJP+zR0GBa6ry2mvhs6aLF7ttDjsstti8LxXel4xE2LHDCdtk2TfCUb++K5G3eLHLQt92m6uT/frrkatuhGPAALf044MOLmHnh1i7EQYTrgJHbYTWgq4NP6I3WsY7mHh914Zh5B6eWK6qqtYGloHOH0xAx0BxcfZkoHv2THxSW7xEE9CvveaW0fzPHkOHuqyiZ10IZtEiV8WjUaPYYuvVyy2TMZHw/fedFzuVAtqjpAT++U/XvXDXLmcZueuu2q0bHt26ucHejw86VgHdsaPLIsfT5r4uBLRf0esnmx2L79owjNzGE8tbtlR7oU1A5w8moGMgGzLQqk5Ap8v/DHDgga6FdDgf9KuvOo9vnz61H8cTpuFsHLFW4PDo2NF9EUqGD3r6dJcFP/74xI/ll1NPdT/f2293563NuuFRUABHH127gN6zx9XwjjUDDfHZGDwBHUu98lgFdDjRW69efKLXb6baMIzcJ3hulGWg8w8T0DGQDRnoVatcjOnyP3uEm0io6gT00KH+6lMfdpgTcqECeudO1xgkHgEt4r5cJEtA9+sX3cudCho3hl/9ypUCrM26EUz//u6uwLZtkbdZu9Z1aow1Aw3x2TiWLXPX74AD/O/TsqWbk+BXQIeK3vr1naUlXtHrJ1NtGEbuE05Amwc6fzABHQPZkIH2hGE6M9DgBPSSJTXF2oIFrnpCbf5nDxEntl9/3WVGPT7/3L2OR0CDs3HMm+evIkUkNm6EWbPqxr6RLPr3d+I4WoUUL4sci6c30Qx0586x2Y1EqmtB+yVY9DZp4iapGoZhJIJ5oPMbE9AxkA0Z6HSXsPMoK3MiNzjT+8orbnnyyf6Pc/LJrnpEsJ863gocHj17wqZNsQmwUGbOdGIs2wQ0RLdxhKsBXRsHH+zuKMSTgV6+PL52814t6FjZtcv9DYe28TYMw4gV80DnNz6bIBuQPRnokhJo0SK9cQS39O7Xzz1/9VVXis3zsPrhxBPd8rXX4Kij3PNFi1wW8ogj4ovNs7fMmxebUAzGa7vtVbfIBtq1c5nlZAvoggL3M41VQKs6AT1sWGz7gTvfW2/Fvp9XAzrfBbSIDAP+CBQAj6jqb0LeHwL8Gwi41HlOVe8MvLcCqAL2ALtVNeZ8/q5du1i9ejXbt2+P9yMYKaawsJCSkhIaNGiQ7lAylmALh3eZTEDnDyagYyBbMtDp9j+D6/rWokW1XeD7753gueqq2I5z0EHOcjF9Otxyi1u3eLG77R86Mcwv3vWZPx+GD4/vGNOnu0l8DRvGt3+66N+/dgHdtGnsX8DiqQW9dq2z+MRSgcOjpMRNdtyzx5+f3sNr453PAlpECoAHgZOB1cAsEXlBVReFbPq2qp4e4TAnqGqEPqG1s3r1aoqKiigtLUXSVS7IiIiqUllZyerVq+kczx9onmACOr8xC0cMeF2H9u5NdyTh2bXLict02zfAZYjLyqqtF2+/7eom+/U/BzN0KLzzTrWfetEiV5YtXlq0cBnWeCcSrl7t/N3ZZN/w6N/feYHXrg3/vlfCLlZNE083wnhK2HmUlDg/97ffxrafCWgA+gFLVXWZqu4EpgBn1WUA27dvp1WrViaeMxQRoVWrVnaHoBaaNnVLm0SYn5iAjoHgrkPJYP16eO+95BwLXJe5nTszIwMNzsYxb57LEr7yiqvZfNxxsR9n6FAnvt9914mmTz+N3//s4U0kjIcZM9wyme276wrPchIpC71yZXxNQTp1chnh3bv97xNPCTuPWEvZeZiABqA9sCro9erAulCOEZG5IvKSiPQIWq/AqyLysYhcHm8QJp4zG/v51E79+q4qkieg69ePvTeBkb2YgI4Br1xZMnzQqjBiBAwaBI8/nvjxIHMqcHiUl7us8aefOv/z4MHx2S4GD3a3x6ZPd2XPdu5MXED37OmyyDt3xr7v9Omu1nWmfFGJhT593CAfSUDH2kTFo1Mn90Xp66/97+M1yCktjf18iQroWMr/5SDhlFFoTZrZQCdV7Q38CZga9N4gVe0DnApcLSKD9zuByOUiUiEiFevWrUtS2IaReXh3prdscc/te0f+YAI6BjxvUzJ80JMmOVtC587wP/8DTz+d+DEXLHANIhKxNyQTbyLhf/4DCxf66z4YjqZNYeBAJ1wTrcDh0bNndTY7FlRdHCed5K51ttG4scu+hxPQO3c6a0c8AjqeWtDLl0Pbti6mWLEMdEKsBoJ/yiVAja8+qrpZVbcEnk8DGohI68DrrwPLb4HncZYQQvafqKp9VbXvgQcemHDAkye7L1r16rnl5MmJHa+yspKysjLKyspo27Yt7du33/d6Zy3fqisqKrj22mtrPcfAgQMTC9LICrziAlVV5n/ON7JQAqSPZGWgN26EG290t9PnzXNZ6B//GF58MbHjzp/vmo8UFiZ2nGTRtau7nXXffe51PP5nj6FDYfZs56WGxL8klJW5Zbguh9FYtAi++SY7/c8e/fvDRx/VrK0NzoKhGn8GGmKbSBhvCTuA1q3dBM54BHSDBnnvU5wFHCYinUWkITAKeCF4AxFpK4F7+CLSD/e/olJEmopIUWB9U+AHwIJUBjt5Mlx+uftypuqWl1+emIhu1aoVc+bMYc6cOYwbN47rr79+3+uGDRuyO4oXqW/fvtx///21nuO9ZPrzjIylWbNqAZ3n40reYQI6BoJn3CbC7bc7//ODD7o/uP/8x91aHzkydkEXTKZU4PCoX9/Fs2aNK6GWiLVk6FD3z/Oxx5zAS/SbfrducMIJrp2zV9rMD57/OZsF9IAB7nd4yZKa6+MpYefh7RNLBnrZsvgmEILLRMbaTAVcTfFWrfL7Nquq7gauAV4BFgPPqOpCERknIuMCm40EFojIXOB+YJSqKnAQ8E5g/UfAf1X15VTGe+utropPMN9/79Ynk7Fjx3LDDTdwwgkncPPNN/PRRx8xcOBAysvLGThwIJ8GblfNnDmT0093xUnGjx/PJZdcwpAhQ+jSpUsNYd0soKZmzpzJkCFDGDlyJF27dmXMmDFooIvTtGnT6Nq1K8ceeyzXXnvtvuMGs2LFCo477jj69OlDnz59agjz3/3ud/Ts2ZPevXtzS6BM0dKlSxk6dCi9e/emT58+fPHFF8m9UEYNLAOdv1gZuxjwMtCJWDg++cQJ5yuvdKLZO+5LLzlBd9ZZbsLdscfGdtytW+GLL1wmO5MoL4eKCmffSES09O3rrtPGjdUNQRJBxGXGy8vhzjvh3nv97Td9Ohx6aHXGNRsJbqjSI2hqWDxdCD2aNnVZYb8CetcuJ9gTqZBVUlIt+v1SWZn39g1gny1jWsi6vwQ9fwB4IMx+y4DeKQ8wiEh3NeLpfFkbn332GdOnT6egoIDNmzfz1ltvUb9+faZPn84vfvELnn322f32WbJkCW+88QZVVVUcccQRXHnllfvVTv7kk09YuHAhBx98MIMGDeLdd9+lb9++XHHFFbz11lt07tyZ0aNHh42pTZs2vPbaaxQWFvL5558zevRoKioqeOmll5g6dSoffvghTZo0YcOGDQCMGTOGW265hREjRrB9+3b2ZmrZqByhqAjWrXN3tkxA5xeWgY6BRDPQe/fC1Ve7f+B33VXzvZYtXbOQDh3gtNOc6IyFxYtdhjaTMtBQ7YOO1//sUb+++4IBifufPXr1cv7zBx7w54Xetct1IMzm7DM4m0+LFvv7oBPJQENstaBXrXJ/D/FaOCC+DLQJ6Owj0he6eL7o1ca5555LQaCw+KZNmzj33HM58sgjuf7661m4cGHYfYYPH06jRo1o3bo1bdq0YW2YGpH9+vWjpKSEevXqUVZWxooVK1iyZAldunTZV2c5koDetWsXl112GT179uTcc89lUWAiyPTp07n44otpEpiZ3bJlS6qqqvjqq68YMWIE4JqhNIm3YL7hC8tA5y8moGMg0Qz0k0/C++/D3XfDAQfs/36bNs4i0Lq18wv7rVO8dq07NmROBQ6PESOcSD3jjMSP5QnXZE6SvOsuN4nt5z+vfdtZs9wgmY3l64KpV891h/zgg5rrV61yX+Ti/X8bSy3oRGpAe3jNVGJJsJmAzj4mTNj/d7JJE7c+2TT1CvsCv/zlLznhhBNYsGABL774YsSayI2C6pYVFBSE9U+H28azcdTGvffey0EHHcTcuXOpqKjYN8lRVfcrNef3mEbyMA90/mICOgYSyUB/9x3cdJObMHjBBZG3a9/eiejGjeHkk+Gzz8Jvt349TJzoxNzBB7ss6oknwiGHxB5bKmnbFh5+ODnfzEeMcPaDZGaA27SBX/7S+dBffTX6ttOnO+uHlwnPZgYMcJ75LVuq18Vbws7Dy0D7+R/ulbBLVEDv3On+FvxSWZn3JeyyjjFj3FjXqZP7++vUyb0eMya15920aRPt27vy2E888UTSj9+1a1eWLVvGihUrAHg6QimmTZs20a5dO+rVq8ekSZPYE5j9+4Mf/IDHHnuM7wMG8Q0bNlBcXExJSQlTp04FYMeOHfveN1KDZaDzFxPQMVBY6KwE8WSgb73VTWB68MHay5917uxEtKoTyIHxle++czWjhw1zwvSKK9wt7FtvddnqGTNia2ucbbRv77Kmye4se+21zkpwww3RG4FMn+5867mQwezf32VuP/64el2iArpjR+fFD1gxo7J8uftb8srRxUOspexULQOdrYwZ48bBvXvdMtXiGeCmm27if//3fxk0aNA+0ZpMGjduzEMPPcSwYcM49thjOeigg2jevPl+21111VU8+eSTDBgwgM8++2xflnzYsGGceeaZ9O3bl7KyMu655x4AJk2axP3330+vXr0YOHAg33zzTdJjN6rx6kCbgM5DVDWrHkcddZSmkwMOUL3mmtj2qahQFVG99trY9ps7152vSxfV4cNVGzRQBdXOnVVvuUX1k09U9+6N7ZhGeJ57zl3bhx4K/35VlWr9+qo331y3caWKdevc5/3tb6vXHXCA6lVXxX/MZ591x/z449q3Pfts1UMOif9cqqoffeTO9+9/+9u+qmr/z5wOgArNgLG0rh7hxuxFixbFe/lyiqqqKlVV3bt3r1555ZX6hz/8Ic0R1cR+TrXz29+6cQVUf/3rdEdjpIJIY7ZloGOkuDi2DPTevXDVVc4qcOedsZ2rVy94+WWXNZs3z2VKP/rIVdv4f//P1TLO53JcyeTss2HIEGfnCFfW7u23XXY62ycQerRu7ew+ng9661b3uRO1cED0iYR79sD118PUqYnVBYfYM9BeZtwy0Eam8PDDD1NWVkaPHj3YtGkTV1xxRbpDMmIk2PdsHuj8wsrYxYjnd/LLY4850TtpEoS5O1cr/fq59siFhdnZ+S5bEHGl7Pr0cRML//CHmu9Pn+6awgwalJ74UsGAAfDGG+55ohU4oPZuhFVVcP75zm9+3XUQuOMcN23aOBuIXwFtXQiNTOP666/n+uuvT3cYRgIE2zbMwpFfmCSLkVgy0JWVcMstcNxxiXn2mjQx8VwXlJXBpZfCn/60/+TN6dNdbe542k5nKv37uy9nq1cnR0C3bu2uT7gM9KpV7u/gpZfcPIB7703cr19Q4HzxfmtBm4A2DCPZmIDOX0yWxUgsGehf/MI1/njwQbNaZAu//vX+Ze3WrnUWmmwvXxdKcEOVZAhokfCl7Coq3LmWL4f//tdZmpJFLLWgTUAbhpFsTEDnLyagY6S42DXduP5618nu+edh9mznrwwu3/XRR658209/mnnNTYzIHHSQq2ry4ouusQ3A66+7Za74nz1694aGDZ0PeuVKJ4ADVbviplOnmgL6uedg8GB3nvfeS9z3HEo8AtrK2BmGkSyCRbN5oPML80DHyIgRrn7uxIkQWl6zWTMnIDp1chaAtm3hjjvSE6cRPz/9Kfz1r66s3SefOPtGixbVrddzhUaNXKfIDz903QnbtnVCNxE6dYI5c9yXyd/9zlmYBgxwkwYPOigZUdekpAT+/W93vtru8piANgwj2QSLZstA5xeWgY6R0aNh0SJX93HdOnd7+tln3aSzSy+FQw91vtItW5x1w+teaGQPhYWuW+SCBe4uwvTprklNLtbYHjDA1YJevjwx+4ZHx47w7bcwdqwTz+ed5zL4qRDP4AT09u3+ak9XVrp/cIl+STCynyFDhvDKK6/UWHffffdxVRR/0ZAhQ6ioqADgtNNOY+PGjfttM378+H31mCMxderUfe24AW6//XamT58eQ/RGJmEWjvzFMtBxIuImTbVuDUcdle5ojGRzzjnOenDTTe7L0C23pDui1NC/P/zxj/Duu8lpt+6VsnvqKbjtNvjVr1I7ATa4lF1t3uYNG8z/bDhGjx7NlClTOCXIUzRlyhTuvvtuX/tPmzYt7nNPnTqV008/ne7duwNwZ6z1TY2MwgR0/mIC2jDCIOI87t6Xo1zzP3t4Ewl37kxOBvqYY1x96TvuiN6yPlkEC+jevaNva10IM5PrrnO2n2RSVub+fiMxcuRIbrvtNnbs2EGjRo1YsWIFX3/9NcceeyxXXnkls2bNYtu2bYwcOZJf/epX++1fWlpKRUUFrVu3ZsKECTz11FN06NCBAw88kKMCg8bDDz/MxIkT2blzJ4ceeiiTJk1izpw5vPDCC7z55pv8+te/5tlnn+Wuu+7i9NNPZ+TIkcyYMYOf//zn7N69m6OPPpo///nPNGrUiNLSUi666CJefPFFdu3axT//+U+6du1aI6YVK1ZwwQUXsHXrVgAeeOABBg4cCMDvfvc7Jk2aRL169Tj11FP5zW9+w9KlSxk3bhzr1q2joKCAf/7znxxyyCFJuf75hFk48peUWjhEZJiIfCoiS0VkvxyeiAwRkU0iMifwuD2V8RhGLJSXu4oRPXs6a04u0rmzu4sC1XWcE+HQQ2Hp0roRzxBbMxUT0IZHq1at6NevHy+//DLgss/nnXceIsKECROoqKhg3rx5vPnmm8ybNy/icT7++GOmTJnCJ598wnPPPcesWbP2vXfOOecwa9Ys5s6dS7du3Xj00UcZOHAgZ555JnfffTdz5sypIVi3b9/O2LFjefrpp5k/fz67d+/mz3/+8773W7duzezZs7nyyivD2kTatGnDa6+9xuzZs3n66ae59tprAXjppZeYOnUqH374IXPnzuWmm24CYMyYMVx99dXMnTuX9957j3bt2iV2UfOU+vWd7a+gwM0rMfKHlGWgRaQAeBA4GVgNzBKRF1R1Ucimb6vq6amKwzAS4U9/8jdBLVsRcT7o//wnORnouqZdO/ePy08t6MpK6NIl9TEZsREtU5xKPBvHWWedxZQpU3jssccAeOaZZ5g4cSK7d+9mzZo1LFq0iF69eoU9xttvv82IESNo0qQJAGeeeea+9xYsWMBtt93Gxo0b2bJlSw27SDg+/fRTOnfuzOGHHw7ARRddxIMPPsh1110HOEEOcNRRR/Hcc8/tt/+uXbu45pprmDNnDgUFBXwWKGY/ffp0Lr744n0xtmzZkqqqKr766itGjBgBQGFhoa9rZoSnqAh27crd/xNGeFKZge4HLFXVZaq6E5gCnJXC8xlG0hHJ/SY2no0jGwV0QYET0X4z0FaBw/A4++yzmTFjBrNnz2bbtm306dOH5cuXc8899zBjxgzmzZvH8OHD2b59e9TjSATVNHbsWB544AHmz5/PHXfcUetxNLgOahgaBdKbBQUF7N69e7/37733Xg466CDmzp1LRUUFO3fu3Hfc0BhrO5cRG0VFZt/IR1IpDdoDwXmh1YF1oRwjInNF5CUR6ZHCeAzDCMPo0TBqFERIsmU8JSWuish338G2bbB37/7b7NnjmhqZhcPwaNasGUOGDOGSSy5h9OjRAGzevJmmTZvSvHlz1q5dy0svvRT1GIMHD+b5559n27ZtVFVV8eKLL+57r6qqinbt2rFr1y4mT568b31RURFVYbpxde3alRUrVrB06VIAJk2axPHHH+/782zatIl27dpRr149Jk2axJ49ewD4wQ9+wGOPPcb3gbqrGzZsoLi4mJKSEqZOnQrAjh079r1vxI4J6PwklQI63Nfy0K+9s4FOqtob+BMwNeyBRC4XkQoRqVi3bl1yozSMPOeQQ+Af/8jeNuWlpfDWWy673KSJy0o3aOAm97Rq5ZrDHHqos+KYgDaCGT16NHPnzmXUqFEA9O7dm/Lycnr06MEll1zCoEGDou7fp08fzjvvPMrKyvjhD3/Icccdt++9u+66i/79+3PyySfXmPA3atQo7r77bsrLy/niiy/2rS8sLOTxxx/n3HPPpWfPntSrV49x48b5/ixXXXUVTz75JAMGDOCzzz6jadOmAAwbNowzzzyTvn37UlZWts8/PWnSJO6//3569erFwIED+eabb3yfy6hJs2bWRCUfkVTdyhGRY4DxqnpK4PX/Aqjq/4uyzwqgr6quj7RN37591avFaRiGsWIFvPQS7NjhHtu3Vz8Pfg1w551u4mQ6EZGPVbVveqOoO8KN2YsXL6Zbt25pisjwi/2c/PHCC+4uV8BSbuQYkcbsVJaxmwUcJiKdga+AUcD5IUG1BdaqqopIP1xGvDKFMRmGkWOUlsKVV6Y7CsMw8pWguaNGHpEyAa2qu0XkGuAVoAB4TFUXisi4wPt/AUYCV4rIbmAbMEptdoNhGIZhGIaRwaS0kYqqTgOmhaz7S9DzB4AHUhmDYRiGkXmEqw5hZA6WyzKM6OR4gS7DMAwj0ygsLKSystJEWoaiqlRWVlp9aMOIgrXyNgzDMOqUkpISVq9ejVVVylwKCwsp8Vp9GoaxHyagDcMwjDqlQYMGdE53ORTDMIwEMAuHYRiGYRiGYcSACWjDMAzDMAzDiAET0IZhGIZhGIYRAynrRJgqRGQd8GXQqtZAxM6FWYDFn16yOf5sjh3yN/5OqnpgsoPJVMKM2ZDdP/tsjh0s/nSTzfFnc+yQ5DE76wR0KCJSkc1tcS3+9JLN8Wdz7GDx5zPZfO2yOXaw+NNNNsefzbFD8uM3C4dhGIZhGIZhxIAJaMMwDMMwDMOIgVwQ0BPTHUCCWPzpJZvjz+bYweLPZ7L52mVz7GDxp5tsjj+bY4ckx5/1HmjDMAzDMAzDqEtyIQNtGIZhGIZhGHWGCWjDMAzDMAzDiIGsFtAiMkxEPhWRpSJyS7rjiRURWSEi80VkjohUpDue2hCRx0TkWxFZELSupYi8JiKfB5YHpDPGSESIfbyIfBW4/nNE5LR0xhgNEekgIm+IyGIRWSgiPw2sz/jrHyX2rLj+IlIoIh+JyNxA/L8KrM/4a59p2Jhdt2TzmA3ZPW5n85gN2T1u19WYnbUeaBEpAD4DTgZWA7OA0aq6KK2BxYCIrAD6qmpWFCYXkcHAFuApVT0ysO53wAZV/U3gH+IBqnpzOuMMR4TYxwNbVPWedMbmBxFpB7RT1dkiUgR8DJwNjCXDr3+U2H9EFlx/ERGgqapuEZEGwDvAT4FzyPBrn0nYmF33ZPOYDdk9bmfzmA3ZPW7X1ZidzRnofsBSVV2mqjuBKcBZaY4pp1HVt4ANIavPAp4MPH8S9weWcUSIPWtQ1TWqOjvwvApYDLQnC65/lNizAnVsCbxsEHgoWXDtMwwbs+uYbB6zIbvH7WwesyG7x+26GrOzWUC3B1YFvV5Nlvxwg1DgVRH5WEQuT3cwcXKQqq4B9wcHtElzPLFyjYjMC9wqzMhbaaGISClQDnxIll3/kNghS66/iBSIyBzgW+A1Vc26a58B2JidGeTC721WjBse2TxmQ3aO23UxZmezgJYw67LNjzJIVfsApwJXB25XGXXHn4FDgDJgDfD7tEbjAxFpBjwLXKeqm9MdTyyEiT1rrr+q7lHVMqAE6CciR6Y5pGzExmwjGWTNuAHZPWZD9o7bdTFmZ7OAXg10CHpdAnydpljiQlW/Diy/BZ7H3eLMNtYGvFKeZ+rbNMfjG1VdG/gj2ws8TIZf/4CX61lgsqo+F1idFdc/XOzZdv0BVHUjMBMYRpZc+wzCxuzMIKt/b7Np3MjmMRtyY9xO5ZidzQJ6FnCYiHQWkYbAKOCFNMfkGxFpGjDmIyJNgR8AC6LvlZG8AFwUeH4R8O80xhIT3h9SgBFk8PUPTIp4FFisqn8Ieivjr3+k2LPl+ovIgSLSIvC8MTAUWEIWXPsMw8bszCCrf2+zaNzI2jEbsnvcrqsxO2urcAAEyqfcBxQAj6nqhPRG5B8R6YLLYADUB/6e6fGLyD+AIUBrYC1wBzAVeAboCKwEzlXVjJv0ESH2IbjbUAqsAK7w/FGZhogcC7wNzAf2Blb/AudJy+jrHyX20WTB9ReRXrgJJwW4pMMzqnqniLQiw699pmFjdt2SzWM2ZPe4nc1jNmT3uF1XY3ZWC2jDMAzDMAzDqGuy2cJhGIZhGIZhGHWOCWjDMAzDMAzDiAET0IZhGIZhGIYRAyagDcMwDMMwDCMGTEAbhmEYhmEYRgyYgDZyChHZIyJzgh63JPHYpSKScTUvDcMwshUbs41spX66AzCMJLMt0L7TMAzDyHxszDayEstAG3mBiKwQkd+KyEeBx6GB9Z1EZIaIzAssOwbWHyQiz4vI3MBjYOBQBSLysIgsFJFXA12OEJFrRWRR4DhT0vQxDcMwcgIbs41MxwS0kWs0DrkdeF7Qe5tVtR/wAK4bGoHnT6lqL2AycH9g/f3Am6raG+gDLAysPwx4UFV7ABuBHwbW3wKUB44zLjUfzTAMI+ewMdvISqwToZFTiMgWVW0WZv0K4ERVXSYiDYBvVLWViKwH2qnqrsD6NaraWkTWASWquiPoGKXAa6p6WOD1zUADVf21iLwMbMG1yZ2qqltS/FENwzCyHhuzjWzFMtBGPqERnkfaJhw7gp7voXoewXDgQeAo4GMRsfkFhmEYiWFjtpGxmIA28onzgpbvB56/B4wKPB8DvBN4PgO4EkBECkSkONJBRaQe0EFV3wBuAloA+2VUDMMwjJiwMdvIWOwbl5FrNBaROUGvX1ZVryxSIxH5EPfFcXRg3bXAYyJyI7AOuDiw/qfARBG5FJe1uBJYE+GcBcDfRKQ5IMC9qroxSZ/HMAwjl7Ex28hKzANt5AUBP11fVV2f7lgMwzCM6NiYbWQ6ZuEwDMMwDMMwjBiwDLRhGIZhGIZhxIBloA3DMAzDMAwjBkxAG4ZhGIZhGEYMmIA2DMMwDMMwjBgwAW0YhmEYhmEYMWAC2jAMwzAMwzBi4P8D5F6qcGTcHQIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 864x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_history(history) # 调用这个函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "2eeaa76c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "45/45 [==============================] - 0s 2ms/step - loss: 1.0847 - acc: 0.7736\n",
      "DNN的测试准确率为 77.36%\n"
     ]
    }
   ],
   "source": [
    "result = dnn.evaluate(X_test, y_test) #评估测试集上的准确率\n",
    "print('DNN的测试准确率为',\"{0:.2f}%\".format(result[1]*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "a235c9b2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "45/45 [==============================] - 0s 2ms/step\n",
      "第一个用户分类结果为: 0\n"
     ]
    }
   ],
   "source": [
    "prediction = dnn.predict(X_test) #预测测试集的图片分类\n",
    "print('第一个用户分类结果为:', np.argmax(prediction[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88daa4a2",
   "metadata": {},
   "source": [
    "### 神经网络模型-归一化之后"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "26ee5752",
   "metadata": {},
   "outputs": [],
   "source": [
    "# from sklearn.model_selection import train_test_split\n",
    "# X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "633ab11e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# X_train = np.asarray(X_train).astype(np.float32)\n",
    "# X_test = np.asarray(X_test).astype(np.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "295e3c1b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler #导入归一化缩放器\n",
    "scaler = MinMaxScaler() #创建归一化缩放器\n",
    "X_train = scaler.fit_transform(X_train) #拟合并转换训练集数据\n",
    "X_test = scaler.transform(X_test) #转换测试集数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "13a3bd69",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/30\n",
      "71/71 [==============================] - 0s 5ms/step - loss: 0.5333 - acc: 0.7351 - val_loss: 0.5397 - val_acc: 0.7214\n",
      "Epoch 2/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.5020 - acc: 0.7349 - val_loss: 0.5176 - val_acc: 0.7223\n",
      "Epoch 3/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4783 - acc: 0.7455 - val_loss: 0.5012 - val_acc: 0.7400\n",
      "Epoch 4/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4630 - acc: 0.7626 - val_loss: 0.4911 - val_acc: 0.7578\n",
      "Epoch 5/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4526 - acc: 0.7799 - val_loss: 0.4871 - val_acc: 0.7613\n",
      "Epoch 6/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4447 - acc: 0.7821 - val_loss: 0.4797 - val_acc: 0.7693\n",
      "Epoch 7/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4387 - acc: 0.7848 - val_loss: 0.4739 - val_acc: 0.7702\n",
      "Epoch 8/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4337 - acc: 0.7852 - val_loss: 0.4696 - val_acc: 0.7693\n",
      "Epoch 9/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4309 - acc: 0.7854 - val_loss: 0.4724 - val_acc: 0.7684\n",
      "Epoch 10/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4276 - acc: 0.7897 - val_loss: 0.4654 - val_acc: 0.7693\n",
      "Epoch 11/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4252 - acc: 0.7919 - val_loss: 0.4684 - val_acc: 0.7693\n",
      "Epoch 12/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4231 - acc: 0.7941 - val_loss: 0.4649 - val_acc: 0.7649\n",
      "Epoch 13/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4205 - acc: 0.7934 - val_loss: 0.4641 - val_acc: 0.7640\n",
      "Epoch 14/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4193 - acc: 0.7954 - val_loss: 0.4718 - val_acc: 0.7782\n",
      "Epoch 15/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4183 - acc: 0.7952 - val_loss: 0.4625 - val_acc: 0.7649\n",
      "Epoch 16/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4168 - acc: 0.7968 - val_loss: 0.4665 - val_acc: 0.7711\n",
      "Epoch 17/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4164 - acc: 0.7990 - val_loss: 0.4645 - val_acc: 0.7693\n",
      "Epoch 18/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4154 - acc: 0.7999 - val_loss: 0.4648 - val_acc: 0.7720\n",
      "Epoch 19/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4144 - acc: 0.7992 - val_loss: 0.4643 - val_acc: 0.7711\n",
      "Epoch 20/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4138 - acc: 0.8023 - val_loss: 0.4636 - val_acc: 0.7666\n",
      "Epoch 21/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4133 - acc: 0.8001 - val_loss: 0.4617 - val_acc: 0.7702\n",
      "Epoch 22/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4121 - acc: 0.8028 - val_loss: 0.4607 - val_acc: 0.7693\n",
      "Epoch 23/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4121 - acc: 0.8028 - val_loss: 0.4649 - val_acc: 0.7755\n",
      "Epoch 24/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4117 - acc: 0.8030 - val_loss: 0.4641 - val_acc: 0.7764\n",
      "Epoch 25/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4110 - acc: 0.8039 - val_loss: 0.4626 - val_acc: 0.7702\n",
      "Epoch 26/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4108 - acc: 0.8028 - val_loss: 0.4639 - val_acc: 0.7684\n",
      "Epoch 27/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4102 - acc: 0.8054 - val_loss: 0.4675 - val_acc: 0.7782\n",
      "Epoch 28/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4096 - acc: 0.8052 - val_loss: 0.4653 - val_acc: 0.7773\n",
      "Epoch 29/30\n",
      "71/71 [==============================] - 0s 3ms/step - loss: 0.4093 - acc: 0.8052 - val_loss: 0.4634 - val_acc: 0.7720\n",
      "Epoch 30/30\n",
      "71/71 [==============================] - 0s 4ms/step - loss: 0.4090 - acc: 0.8032 - val_loss: 0.4651 - val_acc: 0.7755\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAAEWCAYAAACt0rvRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABa/UlEQVR4nO3dd5xU9fX/8dehCQioCCLSNSqRjisCKmINKGLDCCEq6k+CGmtiwJgoGkliL181Bo2dhBgLsWA3WMDCglgQCyIICoogHann98dnFoZldvfO7p2dmd338/GYx8zcueXM7PDhzOee+/mYuyMiIiIiIhVXI9sBiIiIiIhUFUquRURERERiouRaRERERCQmSq5FRERERGKi5FpEREREJCZKrkVEREREYqLkWiIzs+fM7Iy4180mM5trZkdmYL9uZj9JPL7bzP4YZd1yHGeomb1Y3jhL2W9fM1sQ935FJD1qd9Pab163u1J11Mp2AJJZZrYq6Wl9YB2wKfH8V+4+Luq+3L1/Jtat6tx9RBz7MbO2wJdAbXffmNj3OCDy31BEMk/tbvap3ZVsUnJdxbl7g6LHZjYX+H/u/nLx9cysVlHDISIi5ad2V/KRvo/xUVlINVV02t/MRprZIuB+M9vFzJ4xs8Vm9kPiccukbSaZ2f9LPB5mZm+a2Y2Jdb80s/7lXLedmb1uZivN7GUzu9PMHikh7igx/snMJif296KZNUl6/TQzm2dmS8zsilI+n55mtsjMaiYtO9HMPkg87mFmb5nZMjNbaGZ3mFmdEvb1gJldm/T8ssQ235jZWcXWPdbM3jOzFWY238xGJ738euJ+mZmtMrNeRZ9t0va9zWyqmS1P3PeO+tmUxsx+mth+mZnNNLOBSa8dY2YfJ/b5tZn9NrG8SeLvs8zMlprZG2amNkeqLbW7andLa3cjfM6Nzez+xHv4wcwmJL12vJnNSLyHL8ysX2L5NiU4Zja66O9sZm0tlMecbWZfAa8mlv8n8XdYnviOdEjavp6Z3ZT4ey5PfMfqmdmzZnZBsffzgZmdkOq9VnX6j6562x1oDLQBhhO+D/cnnrcG1gJ3lLL9gcCnQBPgeuAfZmblWPefwLvArsBo4LRSjhklxl8AZwK7AXWAomRvP+Bvif3vkTheS1Jw97eB1cDhxfb7z8TjTcAliffTCzgCOK+UuEnE0C8Rz1HA3kDxusPVwOnAzsCxwLlJjVOfxP3O7t7A3d8qtu/GwLPA7Yn3djPwrJntWuw9bPfZlBFzbeBp4MXEdhcA48xs38Qq/yCc6m4IdCTRQAO/ARYATYFmwO8BL+t4IlWc2l21uyW1u2V9zg8Tyow6JPZ1SyKGHsBDwGWJ99AHmFvCMVI5FPgp8LPE8+cIn9NuwHS2LYG5Edgf6E34Hv8O2Aw8CPyyaCUz6wK0ACamEUfV4e66VZMb4R/bkYnHfYH1QN1S1u8K/JD0fBLh9CbAMGB20mv1CYnT7umsS2hANgL1k15/BHgk4ntKFeMfkp6fBzyfeHwlMD7ptR0Tn8GRJez7WuC+xOOGhAa4TQnrXgw8mfTcgZ8kHj8AXJt4fB/w16T19kleN8V+bwVuSTxum1i3VtLrw4A3E49PA94ttv1bwLCyPpsUx+0LLEg8PgRYBNRIev1fwOjE46+AXwGNiu3jGuC/Jb033XSrDjfU7qrdjdjulvY5A80JSewuKdb7e1G8pX3/Es9HF/2dk97bnqXEsHNinZ0Iyf9aoEuK9XYAlgJ7J57fCNyViX9T+XBTz3X1ttjdfyx6Ymb1zezvidM9Kwinw3ZOPkVXzKKiB+6+JvGwQZrr7gEsTVoGML+kgCPGuCjp8ZqkmPZI3re7rwaWlHQsQm/JSWa2A3ASMN3d5yXi2Cdxym5RIo4/E3pTyrJNDMC8Yu/vQDP7X+K04HJgRMT9Fu17XrFl8wi9B0VK+mzKjNndN5ew35OBY4B5ZvaamfVKLL8BmA28aGZzzGxUtLchUqWp3VW7m/LvVcbn3IrwN/shxaatgC8ixpvKls/GzGqa2V8TpSUr2NoD3iRxq5vqWO6+DngU+KWF8r8hhJ72aknJdfVW/BT9b4B9gQPdvRFbT4eVdMoxDguBxmZWP2lZq1LWr0iMC5P3nTjmriWt7O4fExrJ/mx7ahLCac5PCL/SGxFKHtKOgdCDlOyfwFNAK3ffCbg7ab9llVR8QzidmKw18HWEuMrabyvbtl56y37dfaq7H084hTiB0MDi7ivd/TfuvidwHHCpmR1RwVhE8p3aXbW7JSntc55P+JvtnGK7+cBeJexzNeGsRZHdU6yT/B5/ARxPKJ3ZidC7XRTD98CPpRzrQWAooVxnjRcroalOlFxLsoaEUz7LEnVkV2X6gIkeiUJgtJnVSfR6HpehGB8DBpjZwRYugrmGsv8N/BO4kNDI/adYHCuAVWbWHjg3YgyPAsPMbL/EfzLF429I6J34MVFH94uk1xYTTgvuWcK+JwL7mNkvzKyWmZ0K7Ac8EzG2krxDaKB/Z2a1zawv4W80PvE3G2pmO7n7BsJnsgnAzAaY2U8SNZ5FyzelPIJI9aV2d3vVtd0t8XN294WEWui7LFz4WNvMipLvfwBnmtkRZlbDzFokPh+AGcDgxPoFwKAIMawjnF2oTzg7UBTDZkKJzc1mtkeil7tX4iwDiWR6M3AT1bjXGpRcy7ZuBeoRfp2+DTxfSccdSrg4ZQmh3u7fhH/cqdxKOWN095nA+YSGeyHwA+GCu9L8i1An+aq7f5+0/LeEBnglcE8i5igxPJd4D68SSiZeLbbKecA1ZraSUKv4aNK2a4AxwGQLV8v3LLbvJcAAQu/HEsKFJgOKxZ02d18PDCT0JH0P3AWc7u6fJFY5DZibOIU4gq0XtewNvAysItQg3uXukyoSi0gVdCtqd4urru3urZT+OZ8GbCD03n9HqDnH3d8lXDB5C7AceI2tvel/JPQ0/wBczbZnAlJ5iHDm4Gvg40QcyX4LfAhMJdRYX8e2ueRDQCdCDX+1ZYnCc5GcYWb/Bj5x94z34IiIiNpdiYeZnQ4Md/eDsx1LNqnnWrLOzA4ws70Sp7P6Eeq9JmQ5LBGRKkvtrsQtUXJzHjA227Fkm2ZolFywO/AE4SKXBcC57v5edkMSEanS1O5KbMzsZ4Tv08uUXXpS5aksREREREQkJioLERERERGJSZUqC2nSpIm3bds222GIiKRt2rRp37t702zHUZnUZotIviqtza5SyXXbtm0pLCzMdhgiImkzs+KzvFV5arNFJF+V1marLEREREREJCZKrkVEREREYqLkWkREREQkJlWq5lqkutqwYQMLFizgxx9/zHYoUoa6devSsmVLateune1QcpK+y7lP32GR0im5FqkCFixYQMOGDWnbti1mlu1wpATuzpIlS1iwYAHt2rXLdjg5Sd/l3KbvsEjZMloWYmb9zOxTM5ttZqNSvN7XzJab2YzE7cpir9c0s/fM7JlMximS73788Ud23XVXJSM5zszYdddd1StbCn2Xc5u+w5Ip48ZB27ZQo0a4Hzcu2xGVX8aSazOrCdwJ9Af2A4aY2X4pVn3D3bsmbtcUe+0iYFamYhSpSpSM5Af9ncqmzyi36e8jcRs3DoYPh3nzwD3cDx++fYIdNQHPdqKeyZ7rHsBsd5/j7uuB8cDxUTc2s5bAscC9GYqPjz6CSy+FdesydQQRERERKc0VV8CaNdsuW7MmLC+STgIeZb1MymRy3QKYn/R8QWJZcb3M7H0ze87MOiQtvxX4HbC5tIOY2XAzKzSzwsWLF6cV4Jdfwi23wJtvprWZiBSzZMkSunbtSteuXdl9991p0aLFlufr168vddvCwkIuvPDCMo/Ru3fvWGKdNGkSAwYMiGVfUvXk03dZpKr46quyl0dJwNNZL5MymVynOm/kxZ5PB9q4exfg/4AJAGY2APjO3aeVdRB3H+vuBe5e0LRpejMHH3441KkDzz2X1mYieS/uU2a77rorM2bMYMaMGYwYMYJLLrlky/M6deqwcePGErctKCjg9ttvL/MYU6ZMqViQUiXpuyySPXH9+2vduuzlURLwdNbLpEwm1wuAVknPWwLfJK/g7ivcfVXi8USgtpk1AQ4CBprZXEI5yeFm9kjcAe64I/Tpo+RaqpfKOmU2bNgwLr30Ug477DBGjhzJu+++S+/evenWrRu9e/fm008/BbbtSR49ejRnnXUWffv2Zc8999wmUWnQoMGW9fv27cugQYNo3749Q4cOxT38bp84cSLt27fn4IMP5sILLyyzh3rp0qWccMIJdO7cmZ49e/LBBx8A8Nprr23prezWrRsrV65k4cKF9OnTh65du9KxY0feeOONeD8wSVt1/y7PnTuXQw45hO7du9O9e/dtkvbrr7+eTp060aVLF0aNCuMJzJ49myOPPJIuXbrQvXt3vvjii3g/KKlW4vz3N2YM1K+/7bL69cPyIlES8HTWy2hdtrtn5EYY5m8O0A6oA7wPdCi2zu6AJR73AL4qep60Tl/gmSjH3H///T1dN93kDu7z5qW9qUjO+PjjjyOv26ZN+M4Xv7VpE08sV111ld9www1+xhln+LHHHusbN250d/fly5f7hg0b3N39pZde8pNOOsnd3f/3v//5scceu2XbXr16+Y8//uiLFy/2xo0b+/r1693dfccdd9yyfqNGjXz+/Pm+adMm79mzp7/xxhu+du1ab9mypc+ZM8fd3QcPHrxlv8mSj/frX//aR48e7e7ur7zyinfp0sXd3QcMGOBvvvmmu7uvXLnSN2zY4DfeeKNfe+217u6+ceNGX7FiRbk/o1R/L6DQM9Qe5+otVZut73L07/Lq1at97dq17u7+2WefedHnOXHiRO/Vq5evXr3a3d2XLFni7u49evTwJ554wt3d165du+X18kjn7yT555FHwr8js3D/yCPbrxP3v7+yjvnII+716297rPr1y7de1H2VprQ2O2M91+6+Efg18AJhxI9H3X2mmY0wsxGJ1QYBH5nZ+8DtwOBEwJWmf/9wr95rqS4q85TZKaecQs2aNQFYvnw5p5xyCh07duSSSy5h5syZKbc59thj2WGHHWjSpAm77bYb33777Xbr9OjRg5YtW1KjRg26du3K3Llz+eSTT9hzzz23jL07ZMiQMuN78803Oe200wA4/PDDWbJkCcuXL+eggw7i0ksv5fbbb2fZsmXUqlWLAw44gPvvv5/Ro0fz4Ycf0rBhw/J+LBKT6v5d3rBhA+eccw6dOnXilFNO4eOPPwbg5Zdf5swzz6R+oiuwcePGrFy5kq+//poTTzwRCBPB1C/eVSh5La6RNKL2SEf99xc1rqFDYe5c2Lw53A8duv3rY8dCmzZgFu7Hji3fepmuy87oONfuPtHd93H3vdx9TGLZ3e5+d+LxHe7ewd27uHtPd9+uEM3dJ7l7xq4+at8+fPBKrqW6iHrKLA477rjjlsd//OMfOeyww/joo494+umnSxwnd4cddtjyuGbNmilrXFOtU57f5am2MTNGjRrFvffey9q1a+nZsyeffPIJffr04fXXX6dFixacdtppPPTQQ2kfT+JV3b/Lt9xyC82aNeP999+nsLBwywWX7r7dcHmV3G8lEcVVmhDnSBpRE88o//7iLt0qKwGPul6mf5hnNLnOB2ah9/qVV6CMC8FFqoQotW2ZsHz5clq0CAMGPfDAA7Hvv3379syZM4e5c+cC8O9//7vMbfr06cO4RCs/adIkmjRpQqNGjfjiiy/o1KkTI0eOpKCggE8++YR58+ax2267cc4553D22Wczffr02N+DpKe6f5eXL19O8+bNqVGjBg8//DCbNm0C4Oijj+a+++5jTSJDWrp0KY0aNaJly5ZMmDABgHXr1m15XbIjzsQzzpE0oiaeUf795cLIHalk+od5tU2uk38tPv44rFoFkydnOyqRzIt6ai1uv/vd77j88ss56KCDtiQBcapXrx533XUX/fr14+CDD6ZZs2bstNNOpW4zevRoCgsL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fPjhhzRs2LDUfUvuqWrf5Q0bNnDOOefQqVMnTjnllC1xv/zyy5x55pnUT3SzNm7cmJUrV/L1119z4oknAlC3bt0tr+erqKN3xNlDrN7m6k0918WYhd7rRx+FDRugdu1sRySSntJ65TLphBNO4NJLL2X69OmsXbuW7t278+WXX3LjjTcydepUdtllF4YNG8aPP/5Y6n7CEMrbGzZsGBMmTKBLly488MADTJo0qdT9hAm0SrbDDjsAULNmTTZu3Jj2vsyMUaNGceyxxzJx4kR69uzJyy+/TJ8+fXj99dd59tlnOe2007jssss4/fTTS92/pKbvclDR7/Itt9xCs2bNeP/999m8eTN169bdst/iMZZ1rHxU2ugdSnolE9RznUL//rBiBbz1VrYjEckfDRo0oG/fvpx11llbevpWrFjBjjvuyE477cS3337Lc2WcEurTpw9PPvkka9euZeXKlTz99NNbXlu5ciXNmzdnw4YNjEvqcmrYsCErV67cbl/t27dn7ty5zJ49G4CHH36YQw89tFzvrU+fPluOOWnSJJo0aUKjRo344osv6NSpEyNHjqSgoIBPPvmEefPmsdtuu3HOOedw9tlnM3369HIdU7Knqn2Xly9fTvPmzalRowYPP/wwmzZtAuDoo4/mvvvu21K6tHTpUho1akTLli2ZMGECAOvWrctaaVOUiViirKOxoqWyKblO4YgjwpB8Kg0RSc+QIUN4//33GTx4MABdunShW7dudOjQgbPOOouDDjqo1O27d+/OqaeeSteuXTn55JM55JBDtrz2pz/9iQMPPJCjjjqK9u3bb1k+ePBgbrjhBrp167bNhVd169bl/vvv55RTTqFTp07UqFGDESNGUB6jR4+msLCQzp07M2rUKB588EEgDNHWsWNHunTpQr169ejfvz+TJk3acoHj448/zkUXXVSuY0p2VaXv8nnnnceDDz5Iz549+eyzz9hxxx0B6NevHwMHDqSgoICuXbtuGSrw4Ycf5vbbb6dz58707t2bRYsWRT5WXKKUckQt99BY0VLZrCqdAiooKPCisUYr6tBDQ+/1e+/FsjuRjJo1axY//elPsx2GRJTq72Vm09y9IEshZUWqNlvf5fyQ6b9T27YhWS6uTZtQwxx1HdiahCd3wNevryHtpGJKa7PVc12C/v3DVeoLF2Y7EhERkfwQpUwjiiilHFHL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\n",
      "text/plain": [
       "<Figure size 864x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "history = dnn.fit(X_train, y_train, # 指定训练集\n",
    "                  epochs=30,        # 指定训练的轮次\n",
    "                  batch_size=64,    # 指定数据批量\n",
    "                  validation_split=0.2) #指定验证集,这里为了简化模型，直接用训练集数据\n",
    "show_history(history) # 调用这个函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "f03126b2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "45/45 [==============================] - 0s 3ms/step - loss: 0.4412 - acc: 0.7878\n",
      "DNN（归一化之后）的测试准确率为 78.78%\n"
     ]
    }
   ],
   "source": [
    "result = dnn.evaluate(X_test, y_test) #评估测试集上的准确率\n",
    "print('DNN（归一化之后）的测试准确率为',\"{0:.2f}%\".format(result[1]*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "69a211a5",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "03c7baf5",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
